Apache Maven JDeps插件3.0.0版本发布

Maven JDEPS插件3.0.0版本发布,用于检查Java代码中对内部API的引用,并在构建时阻止不兼容的内部API使用。该插件提供了jdkinternals和test-jdkinternals目标,分别检查主代码和测试代码。通过配置,可以激活这两个目标以确保代码与未来的Java版本兼容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个全新的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

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <!-- <version>2.0.8.RELEASE</version>--> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.nari</groupId> <artifactId>checktools</artifactId> <version>jiangxi</version> <packaging>jar</packaging> <name>nari</name> <description>Nari Security Check Tools</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR1</spring-cloud.version> <!-- <spring-cloud.version>Finchley.SR3</spring-cloud.version>--> </properties> <dependencies> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext7-core</artifactId> <version>7.1.11</version> <type>pom</type> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>jaxen</groupId> <artifactId>jaxen</artifactId> <version>1.2.0</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.6.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <!-- 排除内嵌的Jetty依赖 --> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>11.0.8</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <!-- 或选择其他版本,如4.0.1 --> <scope>provided</scope> </dependency> <!--阿里 FastJson依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency> <!--阿里 Druid Spring Boot Starter依赖 --> <!--<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency>--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.1</version> </dependency> <!--代码生成器依赖 --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> <scope>test</scope> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>3.4.2</version> </dependency> <!--常用库依赖--> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.18.0</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!--<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency>--> <dependency> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.4.0</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.4.0</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-lite</artifactId> <version>5.4.0</version> </dependency> <!-- <dependency>--> <!-- <groupId>org.apache.poi</groupId>--> <!-- <artifactId>poi-ooxml-schemas</artifactId>--> <!-- <version>5.4.0</version>--> <!-- </dependency>--> <!--redis配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- redisson --> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.10.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>2.1.6.RELEASE</version> </dependency> <!-- <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.14.0</version> </dependency> --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!--devtools热部署--> <!--<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency>--> <!--图片验证码--> <dependency> <groupId>com.github.whvcse</groupId> <artifactId>easy-captcha</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.3</version> </dependency> <!--<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.5.0-b01</version> </dependency>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <!--WebSocket核心依赖包--> <dependency> <groupId>org.java-websocket</groupId> <artifactId>Java-WebSocket</artifactId> <version>1.5.2</version> </dependency> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.3.10</version> </dependency> <!-- webService--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-spring-boot-starter-jaxws --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.5.5</version> </dependency> <!-- kafka --> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>3.1.2</version> </dependency> <dependency> <groupId>com.set.direwolfcloud</groupId> <artifactId>direwolf-common-client</artifactId> <version>1.4.0.0-20230301</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/libs/direwolf-common-client_without_sba.jar</systemPath> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--aws s3--> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> <version>1.12.261</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-kms</artifactId> <version>1.12.261</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> <version>1.12.261</version> </dependency> <dependency> <groupId>software.amazon.ion</groupId> <artifactId>ion-java</artifactId> <version>1.0.2</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>jmespath-java</artifactId> <version>1.11.356</version> </dependency> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.8.1</version> </dependency> <dependency> <groupId>com.hitachivantara</groupId> <artifactId>hitachivantara-java-sdk-core</artifactId> <version>0.2.410</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/libs/hitachivantara-java-sdk-core-0.2.410.jar</systemPath> </dependency> <dependency> <groupId>com.hitachivantara</groupId> <artifactId>hitachivantara-java-sdk-hcp</artifactId> <version>0.2.410</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/libs/hitachivantara-java-sdk-hcp-0.2.410.jar</systemPath> </dependency> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.15.1</version> </dependency> <!-- ikanalyzer 中文分词器 --> <dependency> <groupId>com.janeluo</groupId> <artifactId>ikanalyzer</artifactId> <version>2012_u6</version> <exclusions> <exclusion> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> </exclusion> <exclusion> <groupId>org.apache.lucene</groupId> <artifactId>lucene-queryparser</artifactId> </exclusion> <exclusion> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-common</artifactId> </exclusion> </exclusions> </dependency> <!-- lucene-queryparser 查询分析器模块 --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-queryparser</artifactId> <version>7.3.0</version> </dependency> <dependency> <groupId>com.huaban</groupId> <artifactId>jieba-analysis</artifactId> <version>1.0.2</version> </dependency> <dependency> <groupId>sgjdbc</groupId> <artifactId>sgjdbc</artifactId> <version>4.2.16.1</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/libs/sgjdbc-V4.2.16.1-build-20220414.2741.jar</systemPath> </dependency> <dependency> <groupId>com.huaweicloud</groupId> <artifactId>esdk-obs-java-bundle</artifactId> <version>3.23.9</version> </dependency> <dependency> <groupId>org.ahocorasick</groupId> <artifactId>ahocorasick</artifactId> <version>0.6.3</version> </dependency> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-tools</artifactId> <version>4.9.3</version> </dependency> <dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>ons-client</artifactId> <version>1.8.8.Final</version> <!-- 选择与阿里云RocketMQ版本兼容的SDK --> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <excludes> <exclude>sql/</exclude> <exclude>clientToken/</exclude> <exclude>application-*.properties</exclude> <!--shanghai-docker打包需剔除以下文件--> <!-- <exclude>static/</exclude>--> <exclude>api/</exclude> <exclude>libs/</exclude> <exclude>docker-*/</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <!--添加打包时配置文件--> <includes> <include>application-jiangxi*.properties</include> </includes> </resource> </resources> <plugins> <!--<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>--> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> </plugins> </build> </project> 有依赖冲突吗
最新发布
08-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值