2012-07-18 47 views
1

因此,为了更好的可读性,我有一个Java项目包含几个包(如com.myapp. a,com.myapp.bcom.myapp.c),我想构建一个jar用作另一个项目的库。包含多个包的jar文件之外的公共类

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

那么我怎么才能公开我想在罐子外面什么时候我有多个包里面定义的包?

回答

0

当前Java不直接解决此问题。

OSGi通过明确定义导出的软件包列表来解决此问题。 也希望这将与Java 8模块化系统解决。

所以一种选择是使用OSGi,但如果jar文件是直接使用而不是作为OSGi捆绑使用,则此选项不起作用。

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

0

Eclipse通过使所有类都可用来“解决”了这个问题,但客户不打算使用的类放置在名称包含“internal”的包中。例如,这可能意味着您有名为“com.myapp.b”和“com.myapp.internal.b”的软件包。对于这些类的用户而言,内部类不保证向上兼容,甚至不会在以后的版本中出现。

相关问题