包含多个包的jar文件外的公共类

时间:2012-07-18 18:49:09

标签: java jar packages public

所以,我有一个包含多个包的Java项目(如com.myapp. a,com.myapp.bcom.myapp.c)以提高可读性,我想构建一个jar作为库使用另一个项目。

但我只想暴露这个jar中的一些类和接口。问题是如果我没有公开这些类,那么就不能在包之间的jar文件中看到它们(例如我在A包中有一个类com.myapp.a用于com.myapp.b包裹。)

那么当我在里面定义了多个包时,怎样才能暴露出我想要的东西呢?

2 个答案:

答案 0 :(得分:0)

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

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

所以一个选项是使用OSGi,但是如果直接使用jar文件而不是OSGi包,则此选项不起作用。

另一个选择是使用代码混淆(如Proguard)来混淆您不想公开的包。

答案 1 :(得分:0)

Eclipse通过使所有类可用来“解决”此问题,但不打算由客户端使用的类放在名称中包含“internal”的包中。例如,这可能意味着您拥有名为“com.myapp.b”和“com.myapp.internal.b”的包。这些类的用户清楚地知道,内部类不能保证向上兼容,甚至不能在以后的版本中出现。