Apache Maven JDeps插件3.0.0版本发布

一个全新的maven插件刚刚发布,可利用jdeps实用程序查找JDK内部API的使用情况。当该插件被激活时,在代码中如果发现任何内部API的调用都会导致maven构建失败。从Java 9开始,内部API将变为不可访问,因此这个插件可以帮助开发者让他们的代码与下一版本的Java兼容。尽管标注为3.0.0,实际上这是该插件的第一个发布版本。

\\

正如在其项目主页中所描述的,该插件为用户提供两个可用的目标:jdkinternals和test-jdkinternals。前一个目标会检查主代码中是否包含对内部API的引用,而后一个则对测试代码做同样的检查;jdkinternals默认情况下会与maven的process-classes阶段(在编译后立即执行)相关联,而test-jdkinternals则会与process-test-classes阶段相关联(在测试代码编译后立即执行)。默认的配置可以引用该插件并以如下方式同时激活两个目标:

\\
\u0026lt;build\u0026gt;\    \u0026lt;plugins\u0026gt;\        \u0026lt;plugin\u0026gt;\            \u0026lt;groupid\u0026gt;org.apache.maven.plugins\u0026lt;/groupid\u0026gt;\            \u0026lt;artifactid\u0026gt;maven-jdeps-plugin\u0026lt;/artifactid\u0026gt;\            \u0026lt;version\u0026gt;3.0.0\u0026lt;/version\u0026gt;\            \u0026lt;executions\u0026gt;\                \u0026lt;execution\u0026gt;\                    \u0026lt;goals\u0026gt;\                       \u0026lt;goal\u0026gt;jdkinternals\u0026lt;/goal\u0026gt;\                       \u0026lt;goal\u0026gt;test-jdkinternals\u0026lt;/goal\u0026gt;\                    \u0026lt;/goals\u0026gt;\                \u0026lt;/execution\u0026gt;\            \u0026lt;/executions\u0026gt;\        \u0026lt;/plugin\u0026gt;\        \u0026lt;!— Other plugins —\u0026gt;\    \u0026lt;/plugins\u0026gt;\\u0026lt;/build\u0026gt;\
\\

举例来说,假设一个项目使用了内部类sun.misc.BASE64Decoder。当该项目配置使用了JDeps插件,maven会构建失败并提示如下原因:

\\
\[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jdeps-plugin:3.0.0:jdkinternals (default) on project : Found offending packages:\[ERROR] sun.misc -\u0026gt; JDK internal API (rt.jar)\[ERROR] -\u0026gt; [Help 1]\
\\

作为其中一部分输出,对于项目中的每个包,maven还会列示出所有引用了该段代码的包,以及该包的源码。作为上个示例输出的一部分,我们会发现如下包中使用了BASE64Decoder:

\\
\package.name (classes)\      [... other packages ...]\      -\u0026gt; sun.misc                                           JDK internal API (rt.jar)\
\\

这能够帮助开发人员定位出现问题的地方。不过有另外一种方法能够获取到更多细节。 如之前所述,这个插件基于由Oracle提供的,作为JDK 8一部分的jdeps工具包。如果插件由于查找到对内部API的引用,强制构建失败,用户就可以使用jdeps尝试找出与导致问题的API相关的更多信息;有时,如果有非内部API可替换,jdeps甚至可以为用户指出该非内部API。继续上面提到的BASE64Decoder的例子,运行带有合适选项的jdeps将会得出如下结果:

\\
\jdeps -jdkinternals target/classes/*  \\[...]\\JDK Internal API                         Suggested Replacement\----------------                         ---------------------\sun.misc.BASE64Decoder                   Use java.util.Base64 @since 1.8\
\\

不过,如果某个内部API还不存在可替代品,就像sun.misc.Unsafe,这个插件有可能会阻断开发。由于这个缘故,该插件对于那些目前尚未使用任何内部API并且希望确保将来也不会使用它们的用户来说最为实用。Martijn Verburg,jClarity的联合创始人,自2012年以来的Java冠军程序员,在最近的一次交流当中,鼓励所有的开发者使用Apache Maven JDeps插件,以减少将来向Java 9迁移所需投入的精力。

\\

查看英文原文:Apache Maven JDeps Plugin 3.0.0 Released

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值