1

因此,我有一个 Java 项目,其中包含多个包(如com.myapp., com.myapp.b, com.myapp.c)以提高可读性,并且我想构建一个 jar 以用作另一个项目中的库。

但我只想从这个 jar 中公开一些类和接口。问题是,如果我不将这些类声明为公共,那么它们就无法在包之间的 jar 文件中看到(例如,我在包中有一个Acom.myapp.a包中使用的类com.myapp.b)。

那么,当我在里面定义了多个包时,如何才能在 jar 之外公开我想要的东西呢?

4

2 回答 2

0

目前 Java 并没有直接解决这个问题。

OSGi通过显式定义导出的包列表来解决这个问题。也希望Java 8模块化系统也能解决这个问题。

因此,一种选择是使用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 回答