iteye_9831 2014-05-17 10:52 采纳率: 100%
浏览 374
已采纳

如何定义Eclipse中build path上JAR包的访问规则?

如下图所示,我们在导入某一些JAR包时,构建路径中该JAR包下面会自然附带一些访问规则。比如:禁止访问某些package。

那么我希望的效果是, 我自己对外提供的JAR包,在被别人使用的时候也缺省带上这样的访问规则,即:不做特殊改动,缺省情况下是无法访问JAR中的内部私有package的。

这个很类似于OSGi中,一个模块可以设定自己Export-Package,只有本模块导出的package,其他模块在运行时才可见。而内部的package,即使在JAR包中,其他模块也是无法访问的。 我现在的需求就是如何利用Eclipse JAR包的访问规则,达到在编译期屏蔽私有package的目的。

知道的,指点下,多谢!!

  • 写回答

3条回答 默认 最新

  • chainhou 2014-05-19 13:24
    关注

    楼主,你好,通过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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料