1

com.myapp.そのため、読みやすくするためにいくつかのパッケージ ( 、 、com.myapp.bなど) を含む Java プロジェクトがありcom.myapp.c、別のプロジェクトでライブラリとして使用する jar を構築したいと考えています。

しかし、この jar から一部のクラスとインターフェイスのみを公開したいだけです。問題は、これらのクラスを public と宣言しないと、パッケージ間の jar ファイル内に表示されないことです (たとえば、パッケージで使用されるパッケージにクラスAcom.myapp.aありcom.myapp.bます)。

では、内部に複数のパッケージが定義されている場合、必要なものだけを jar の外部に公開するにはどうすればよいでしょうか?

4

2 に答える 2

0

現在、Java はこの問題に直接対処していません。

OSGiは、エクスポートされたパッケージ リストを明示的に定義することで、この問題に対処します。また、 Java 8 Modularity システムでもこの問題が解決されることを願っています。

したがって、1 つのオプションはOSGiを使用することですが、jar ファイルがOSGiバンドルとしてではなく直接使用される場合、このオプションは機能しません。

別のオプションは、コードの難読化 ( Proguardなど) を使用して、公開したくないパッケージを難読化することです。

于 2012-07-18T18:57:38.350 に答える
0

Eclipse は、すべてのクラスを使用可能にすることでこの問題を「解決」しましたが、クライアントが使用することを意図していないクラスは、名前に「internal」が含まれるパッケージに配置されていました。たとえば、「com.myapp.b」および「com.myapp.internal.b」という名前のパッケージがあることを意味する場合があります。クラスのユーザーには、内部クラスが上位互換性を保証されていないこと、または後のリリースに存在することさえ保証されていないことが明確にされています。

于 2012-07-18T19:00:38.837 に答える