如下图所示,我们在导入某一些JAR包时,构建路径中该JAR包下面会自然附带一些访问规则。比如:禁止访问某些package。
那么我希望的效果是, 我自己对外提供的JAR包,在被别人使用的时候也缺省带上这样的访问规则,即:不做特殊改动,缺省情况下是无法访问JAR中的内部私有package的。
这个很类似于OSGi中,一个模块可以设定自己Export-Package,只有本模块导出的package,其他模块在运行时才可见。而内部的package,即使在JAR包中,其他模块也是无法访问的。 我现在的需求就是如何利用Eclipse JAR包的访问规则,达到在编译期屏蔽私有package的目的。
知道的,指点下,多谢!!
楼主,你好,通过eclipse导出jar包时,可以指定相应是Seal的package,实现与你类似的需求。部署是在第二次点击Next时出现的画面。整个配置最终会保存在MANIFEST.MF中。
内容如下:
[code="java"]
Manifest-Version: 1.0
Name: com/test/mytest/
Sealed: true
[/code]
作用:
[quote]
包密封
密封 JAR 文件中的一个包意味着在这个包中定义的所有类都必须在同一个 JAR 文件中找到。这使包的作者可以增强打包类之间的版本一致性。密封还提供了防止代码篡改的手段。
要密封包,需要在 JAR 的 manifest 文件中为包添加一个 Name 头,然后加上值为“true”的 Sealed 头。与可执行的 JAR 一样,可以在创建 JAR 时,通过指定一个具有适当头元素的 manifest 文件密封一个 JAR,如下所示:
Name: com/samplePackage/
Sealed: true
Name 头标识出包的相对路径名。它以一个“/”结束以与文件名区别。在 Name 头后面第一个空行之前的所有头都作用于在 Name 头中指定的文件或者包。在上述例子中,因为 Sealed 头出现在 Name 头后并且中间没有空行,所以 Sealed 头将被解释为只应用到包 com/samplePackage 上。
如果试图从密封包所在的 JAR 文件以外的其他地方装载密封包中的一个类,那么 JVM 将抛出一个 SecurityException 。
[/quote]
参考自:
[url]http://zydky.iteye.com/blog/559124[/url]
要求貌似有点高
访问权限在代码级别似乎就只有4种访问修饰符
如果是在非代码级别上做处理(如果可能的话)即使能让eclipse符合预期,那换一个IDE怎么办,感觉不靠谱啊
为什么要将访问规则定义到包上呢?不直接在类上定义更好更方便么? :o