35

これは何年もの間私を悩ませてきました、そして私はあなたの一人が知っているだろうと思いました-Eclipseの.classpathファイルで、classpathentry要素のcombineaccessrules属性は実際に何に使用されますか?

Javaビルドパス構成ダイアログで操作できることがわかりますが、その良いユースケースは考えられません。設定をいじったり、.classpathファイルを手動で変更したりしても、効果がないようです。

他の誰かがそれをうまく利用してくれて、彼らのアイデアを盗むことができることを願っています。基本的に、それは私が引っ掻こうとしているかゆみです。

4

3 に答える 3

27

アクセスルールを適切に使用すると、「内部」および/または「非API」クラスおよびメソッドの使用を防ぐことができます。クラスまたはパッケージを禁止または非推奨として追加すると、指定されたパッケージからそのクラスまたはクラスを使用すると、コンパイラーはエラーまたは警告を表示します。アクセスルールの詳細については、この短い記事をお読みください。

結合アクセスルールを使用する場合、次の状況を想像してください。

  • AとBの2つのプロジェクトがあります。
  • プロジェクトAのクラスパスには、エクスポートされるjarファイルがあります。jarには、いくつかの「stable api」、「unstable api」、および「non-api」パブリッククラスが含まれています。
  • プロジェクトBはプロジェクトAに依存しています。

プロジェクトAで「非API」クラスの使用を許可しないため、これらのクラス/パッケージにいくつかの禁止されたアクセスルールを設定ます。

プロジェクトBでは、「non-api」の使用も許可していませんが、「unstableapi」を使用すると警告が表示されます。この場合、プロジェクトBでは、エクスポートされたプロジェクトエントリのアクセスルールとルールを組み合わせるをチェックした場合にのみ、追加の非推奨アクセスルールを設定する必要があります。

于 2009-06-23T13:03:18.993 に答える
3

アクセスルールは便利なものですが、危険です。プロジェクトコンパイラからソースファイルを除外しますが、ファイルシステムにはファイルをそのまま残します。

私が取り組んでいるプロジェクトでは、ソースフォルダーの1つにブートストラップクラスがありますが、フォルダー全体を含めると、プロジェクトのクラスパスはコンパイルされません(長い話であり、ビルドプロセスがこれを処理します)。

したがって、Eclipseアクセスルールを使用して除外し、開発中に煩わされることはありません。これは、コードを簡単に変更できないことを意味しますが、文字通り何年も触れられていないクラスの1つです。

JavaDocで判断すると、アクセスルールの組み合わせは実際のエッジのユースケースです。それを使用するには、次のものが必要です。

  • 1つのプロジェクトのエクスポートされたソースエントリのアクセスルール
  • 親プロジェクトからそのプロジェクトへのリンク
  • サブプロジェクトのアクセスルールを親と組み合わせる必要がある

私はそれがどのように役立つかを本当に言うことはできませんが、少なくともあなたの「それは何ですか」という質問に答えることを願っています:)

于 2009-06-23T12:44:21.763 に答える
1

私はそれを自分で使ったことがありませんが、ここで少しの知識を見つけることができます。

プロジェクトのエクスポートされたエントリのアクセスルールをこのエントリのアクセスルールと組み合わせる必要があるかどうか

アクセスルールは「com/tests/**」を含むようなものになります

于 2009-06-23T12:14:18.483 に答える