使用Apache Maven Resolver时如何指定Java版本?
问题
我正在使用2.0.5版本的Apache Maven Resolver以编程方式获取依赖树,编写的代码如下:
try(RepositorySystem system = booter.newRepositorySystem(); CloseableSession session = booter.newRepositorySystemSession(system).build()) { Dependency rootMavenDependency = new Dependency(new DefaultArtifact("io.netty:netty-codec-http:4.1.114.Final"),""); // Build the dependency tree CollectRequest collectRequest = new CollectRequest(); collectRequest.setRoot(rootMavenDependency); collectRequest.setRepositories(Collections.singletonList(central)); CollectResult collectResult = system.collectDependencies(session, collectRequest); return collectResult.getRoot().getChildren().size(); //expected 5, but is 0 }
执行后未获取到预期的5个依赖,返回结果为0,同时出现错误:
无效的构件描述符io.netty:netty-codec-http:jar:4.1.114.Final:构建io.netty:netty-codec-http:4.1.114.Final的有效模型时遇到16个问题 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java23配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java22配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java21配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java20配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java19配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java18配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java17配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java16配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java15配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java14配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java13配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java12配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java11配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java10配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的java9配置文件确定Java版本 - [错误] 无法为io.netty:netty-parent:4.1.114.Final的jdk8配置文件确定Java版本
如何指定Java版本?
解决方法
问题根源是Maven Resolver会话未配置Java版本,导致Netty父POM中的Java版本profile无法激活,进而无法解析依赖。需在构建RepositorySystemSession时添加Java版本属性:
- 修改会话构建逻辑,添加编译和运行时Java版本属性:
RepositorySystemSession session = booter.newRepositorySystemSession(system) .setSystemProperty("maven.compiler.source", "1.8") // 替换为你实际使用的Java版本,例如17 .setSystemProperty("maven.compiler.target", "1.8") .setSystemProperty("maven.runtime.java.version", "1.8") .build();
- 若需明确激活指定的Netty Java版本profile,可在
CollectRequest中添加激活配置:
CollectRequest collectRequest = new CollectRequest(); collectRequest.setRoot(rootMavenDependency); collectRequest.setRepositories(Collections.singletonList(central)); // 激活jdk8 profile,可根据实际版本调整 collectRequest.addProfileActivation(new ProfileActivation("jdk8", true));
配置完成后,Resolver就能正确识别Java版本,激活对应Netty配置,正常解析依赖树。
内容的提问来源于stack exchange,提问作者Thanthla
相关产品推荐
相关产品推荐

