java - 控制对 ".internal"包的访问的最佳实践

标签 java package

我编写 Eclipse 插件并将一些类导出为 API,同时希望限制对其他类的访问。

我遵循 Eclipse 的常见做法,将这些类分离到“.internal”子包中。

但是,我不能对这些类使用“包”或默认级别的访问权限,因为它们中的许多需要被我导出的类使用。

防止或阻止我的 API 用户将这些类用于他们自己的目的的最佳做法是什么?有自动检查器吗?

我承认,在我别无选择的情况下,我曾尝试过使用一些 Eclipse 的内部类:)

澄清:我对非插件代码有类似的需求。

最佳答案

这不只是将 META-INF/MANIFEST.MF 更新为插件 osgi 项目的情况(如果还没有?)。它应该看起来像:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: My-plugin
Bundle-SymbolicName: com.mycompany.mypluginname
Bundle-Version: 1.0.0
Bundle-Vendor: MyCompany
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Service-Component: 
Import-Package: org.apache.log4j;version="1.2.14" (, separated etc)
Export-Package: com.mycompany.mypluginname.myapipackage;version="1.0.0"

然后巧妙地省略了 .internal 包。平台应该完成剩下的工作。

顺便说一句,然后您在任何依赖包、插件等中使用 Import-Package: 而不是依赖于 jar/项目(这是旧的、糟糕的方法,它不起作用——正如您所发现的).

这为您提供了代码依赖性的大量解耦。如果您决定您的插件代码应该属于不同的 jar/bundle,您只需移动单个包,并使新的 bundle/插件导出它。由于客户端 bundle 只是从“云”(云是 OSGi 平台)导入包,您可以更自由地移动代码。

注意:如评论中所述,您无需在 OSGi 中运行您的应用程序即可获得此“好处”。 Eclipse 可以在 OSGi 包限制下编译它的代码,并且您的构建/服务器可以在“不 protected 世界”中运行。例如OSGi list 不会对第 3 方(希望使用 .internal)强制执行任何内容,但会向需要它们的人提供“通知”和限制。

关于java - 控制对 ".internal"包的访问的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/551872/

相关文章:

Java Audio - 如何在游戏期间播放歌曲(应用程序,而不是小程序)

java - 如何修复 "Couldn' t 为目标 : Linux, 64 位加载共享库 'libgdx64.so'”

java - Linkedhashmap里面的ArrayList of Objects,获取数据

java - 是否可以从我的代码中重构另一个包中的 Java 接口(interface)?

linux - openSUSE Linux : No Provider for libglib-dev libgcrypt-dev found

r - 如何将 GGRAPH 包安装到最新的 R (v.3.3.2)

java - android 应用程序正在打开浏览器应用程序而不是 webView,我该如何阻止它?

python - 在python中导入文件

r - 描述顺序 导入 : and NAMESPACE import() in R 2. 14.0 包检查

java - 记录/记录数据库更新、访问、修改等的最后日期/时间的简单方法