【问题标题】:Public class outside a jar file containing multiple packages包含多个包的 jar 文件外的公共类
【发布时间】:2012-07-17 21:32:13
【问题描述】:

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

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

那么,当我在 jar 中定义了多个包时,如何才能在 jar 之外公开我想要的内容呢?

【问题讨论】:

    标签: java jar packages public


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      Eclipse 通过使所有类都可用来“解决”这个问题,但是不打算由客户端使用的类被放置在名称包含“internal”的包中。例如,这可能意味着您有名为“com.myapp.b”和“com.myapp.internal.b”的包。向类的用户明确表示,内部类不保证向上兼容,甚至不保证在以后的版本中出现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-03
        • 2014-01-17
        • 2010-11-20
        • 1970-01-01
        • 2022-11-17
        • 2011-09-18
        相关资源
        最近更新 更多