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 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试