【问题标题】:How to restrict the usage of a Java public class outside of its Jar?如何限制在其 Jar 之外使用 Java 公共类?
【发布时间】:2010-07-16 14:21:51
【问题描述】:

我希望能够将 Java 中的公共类/接口注释为 @NonPublic,这意味着 此接口仅用于此项目,它是 该项目导出的公共 API 的一部分

这对于由多个 jar 文件组成的项目很常见。并非所有 public 类/接口都真正在您的 jar 之外公开。

你知道有什么工具/框架/插件可以做到这一点吗?

【问题讨论】:

  • 这就是 OSGi 所做的,尽管我怀疑这超出了您所追求的范围。
  • 你能提供更多细节吗?这是用于过滤类还是用于强制以编程方式使用类/接口?对于第二种方法,看到你想要一个 Eclipse 插件可能没有用,但 SecurityManager 可以让你看到调用来自哪里。
  • OSGi 超出了我的要求,但肯定能解决它。对我们的基础架构进行 OSGi 化并不太难,但也不是微不足道的

标签: java annotations


【解决方案1】:

恕我直言,Java 中的包系统是现存最糟糕的东西之一。

我不熟悉任何标准的 Java 级机制来执行此操作,尽管编写一个工具或编译器扩展来执行它可能很容易。

但是,如果您使用的是 OSGi(Eclipse 就是这样编写的),那么它的优点之一是可以指定更好的包和模块级别限制的系统。

【讨论】:

    【解决方案2】:

    在没有 OSGi 的情况下,另一种常见做法是将 API 与实现分开。

    您可以将编译时所需的类与运行时所需的类分开。防止你的库的用户依赖于实现细节。

    myLibAPI.jar   
    myLibImpl.jar
    

    【讨论】:

      【解决方案3】:

      OSGi Bundle 就是解决方案。

      如果您想将您的 Jar 转换为 Eclipse 插件,您可以使用 Eclipse RCP 版本。右键单击您的项目:配置 -> 转换为插件项目

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-27
        • 1970-01-01
        • 1970-01-01
        • 2013-08-08
        • 1970-01-01
        • 2013-07-13
        • 2016-11-30
        • 1970-01-01
        相关资源
        最近更新 更多