9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

Apache Maven JDeps 插件 3.0.0 版本发布

  • 2015-11-29
  • 本文字数:1483 字

    阅读完需:约 5 分钟

一个全新的 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 阶段相关联(在测试代码编译后立即执行)。默认的配置可以引用该插件并以如下方式同时激活两个目标:

复制代码
<build>
    <plugins>
        <plugin>
            <groupid>org.apache.maven.plugins</groupid>
            <artifactid>maven-jdeps-plugin</artifactid>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <goals>
                       <goal>jdkinternals</goal>
                       <goal>test-jdkinternals</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <!— Other plugins —>
    </plugins>
</build>

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

复制代码
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jdeps-plugin:3.0.0:jdkinternals (default) on project <project-name>: Found offending packages:
[ERROR] sun.misc -> JDK internal API (rt.jar)
[ERROR] -> [Help 1]
</project-name>

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

复制代码
package.name (classes)
[... other packages ...]
-> 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

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2015-11-29 18:002657
用户头像

发布了 75 篇内容, 共 61.3 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

ELK + Filebeat + Kafka 分布式日志管理平台搭建,最新java面试题及答案

Java 程序员 后端

GitHub上标星75k+的《Java面试突击版,京东java面试题答案

Java 程序员 后端

Go语言安装和配置SDK,阿里牛逼

Java 程序员 后端

《Kubernetes in action 读书笔记》:Kurbernetes横空出世

后台技术汇

kubenetes 11月日更

Elasticsearch聚合的嵌套桶如何排序,java架构和框架

Java 程序员 后端

WEB本地存储:localStorage、Web SQL Database、IndexedDB

devpoint

Cookie indexedDB LocalStorage sessionStorage 11月日更

Geospatial-地理空间,java面试基本知识

Java 程序员 后端

Github限时开放!阿里内部强推的《微服务容器化参考指南

Java 程序员 后端

.NET6新东西--ConfigurationManager

喵叔

11月日更

Gradle项目的jar发布到私有仓库,java并发编程实战王宝令

Java 程序员 后端

Windows11 搭建openvino_tensorflow环境

IT蜗壳-Tango

IT蜗壳 OpenVINO 11月日更 openvino_tensorflow

Java容器 | 基于源码分析List集合体系

知了一笑

Java List 集合 ArrayList

Github上都在疯找的阿里内部“全栈技能修炼”终于来了,kafka基础概念

Java 程序员 后端

GitHub标星17万:打破程序员“中年危机,单点登录(Single-Sign-On)解决方案

Java 程序员 后端

Flink的sink实战之四:自定义,Java开发笔试题目

Java 程序员 后端

外包学生管理系统详细架构设计

天天向上

架构实战营

git(3)Git 分支,mysql语句优化面试题

Java 程序员 后端

Flink处理函数实战之一:深入了解ProcessFunction的状态(Flink-1

Java 程序员 后端

Github上堪称最全的面试题库(Java岗)到底有多香,java基础进阶视频

Java 程序员 后端

Java基础 | Proxy动态代理机制详解

知了一笑

jdk 动态代理 java基础 Proxy

ElasticSearch集群的概念及搭建过程,Java程序员晋升路线

Java 程序员 后端

Redis Pipeline

new life

数据分析入门

加哥

大数据

Python+JavaScript = 真牛!

Jackpop

Git 常用命令,使用Docker部署Spring-Boot项目

Java 程序员 后端

【Promise 源码学习】第二篇 - Promise 功能介绍与特性分析

Brave

源码 Promise 11月日更

Flink SQL Client综合实战,深入理解java虚拟机百度云

Java 程序员 后端

flume基本概念与操作实例(常用source),kalilinux视频教程

Java 程序员 后端

GitLab CI构建SpringBoot-2,rabbitmq原理及作用

Java 程序员 后端

Java基础 | 泛型机制与反射原理

知了一笑

Java jdk 反射 泛型

ELK太重?试试KFC日志采集,2021大厂Java面试经验

Java 程序员 后端

  • 扫码添加小助手
    领取最新资料包
Apache Maven JDeps插件3.0.0版本发布_Java_Abraham Marín Pérez_InfoQ精选文章