Maven插件结合Eclipse Sisu在Java 17下无法正常工作
Maven插件组件在Java 17下无法通过PlexusContainer按名称查找的问题
组件定义示例
@Named("myComponent") public class MyComponent extends AbstractComponent { }
问题现象
该问题与Java版本强相关,新版本Java中组件无法正确注册:
- Java 8:
container.hasComponent(MyComponent.class, "myComponent")返回true - Java 17:
container.hasComponent(MyComponent.class, "myComponent")返回false
背景配置
maven-plugin-plugin配置
负责生成组件扫描所需的描述符,当前配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-plugin-plugin</artifactId> <version>3.9.0</version> <configuration> <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> </configuration> <executions> <execution> <id>descriptor-help</id> <goals> <goal>helpmojo</goal> </goals> </execution> </executions> </plugin>
Eclipse Sisu插件配置
<plugin> <groupId>org.eclipse.sisu</groupId> <artifactId>sisu-maven-plugin</artifactId> </plugin>
当前依赖列表
最低支持Maven版本为3.5.4,依赖如下:
org.apache.maven:maven-artifact:3.5.4:compileorg.apache.maven:maven-plugin-api:3.5.4:compileorg.apache.maven:maven-core:3.5.4:compileorg.apache.maven:maven-model:3.5.4:providedorg.apache.maven:maven-model-builder:3.5.4:providedorg.apache.maven:maven-settings:3.5.4:provided
org.apache.maven.plugin-tools:maven-plugin-annotations:3.6.1:provided
org.codehaus.plexus:plexus-utils:4.0.0:compileorg.codehaus.plexus:plexus-xml:3.0.0:compileorg.codehaus.plexus:plexus-classworlds:2.5.2:provided
org.eclipse.sisu:org.eclipse.sisu.plexus:0.9.0:M2:provided
javax.inject:javax.inject:1:providedjavax.annotation:javax.annotation-api:1.3.2:provided
解决方案:版本组合与Java 17支持说明
1. 核心问题根源
你当前依赖的Maven 3.5.4版本不支持Java 17,Maven从3.8.0版本开始正式兼容Java 17。同时旧版Eclipse Sisu(0.9.0.M2)的里程碑版本对Java 17的模块系统、反射限制支持不足,导致组件注册失败。
2. 推荐的兼容版本组合
核心Maven依赖(升级到兼容Java 17的版本)
org.apache.maven:maven-artifact:3.8.6:compile org.apache.maven:maven-plugin-api:3.8.6:compile org.apache.maven:maven-core:3.8.6:compile org.apache.maven:maven-model:3.8.6:provided org.apache.maven:maven-model-builder:3.8.6:provided org.apache.maven:maven-settings:3.8.6:provided
Plexus相关依赖
org.codehaus.plexus:plexus-utils:4.3.0:compile org.codehaus.plexus:plexus-xml:3.2.1:compile org.codehaus.plexus:plexus-classworlds:2.6.0:provided
Eclipse Sisu依赖
升级到稳定版,避免使用里程碑版本:
org.eclipse.sisu:org.eclipse.sisu.plexus:0.9.0.RELEASE:provided
插件配置调整
- maven-plugin-plugin 升级到支持Java 17的版本:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-plugin-plugin</artifactId> <version>3.10.1</version> <configuration> <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> </configuration> <executions> <execution> <id>descriptor-help</id> <goals> <goal>helpmojo</goal> </goals> </execution> </executions> </plugin>
- sisu-maven-plugin 指定兼容版本:
<plugin> <groupId>org.eclipse.sisu</groupId> <artifactId>sisu-maven-plugin</artifactId> <version>0.9.0.RELEASE</version> </plugin>
3. 额外注意事项
- Java 17的反射权限限制:若组件涉及反射操作,需在
module-info.java中声明权限,或添加JVM启动参数--add-opens java.base/java.lang=ALL-UNNAMED兼容旧代码。 - 确保所有依赖统一升级到兼容Java 17的版本,避免混合新旧版本引发冲突。
内容的提问来源于stack exchange,提问作者Nikolas
相关产品推荐
相关产品推荐

