我编写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/plug-in导出它.由于客户端捆绑包只是从"云"(云是OSGi平台)导入包,因此您可以更自由地移动代码.
注意:如评论中所述,您无需在OSGi中运行应用程序即可获得此"好处".Eclipse可以在OSGi包限制下编译它的代码,并且您的构建/服务器可以在"未受保护的世界"中运行.例如,OSGi清单不对第三方(希望使用.internal)强制执行任何操作,但为需要它们的人提供"通知"和限制.