You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:24:54