java DefaultProjectBuildingRequest组织。阿帕奇。专家项目ProjectBuildingException:处理POM时遇到一些问题
我试图以编程方式解决pom
,但遇到了几个错误
下面是一段代码:
ContainerConfiguration config = new DefaultContainerConfiguration();
config.setAutoWiring(true);
config.setClassPathScanning(PlexusConstants.SCANNING_INDEX);
PlexusContainer plexusContainer = new DefaultPlexusContainer(config);
ProjectBuilder projectBuilder = plexusContainer.lookup(ProjectBuilder.class);
RepositorySystem repositorySystem = plexusContainer.lookup(RepositorySystem.class);
DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
LocalRepository localRepository = new LocalRepository("target/.m2");
session.setLocalRepositoryManager(repositorySystem.newLocalRepositoryManager(session, localRepository));
DefaultProjectBuildingRequest request = new DefaultProjectBuildingRequest();
request.setRepositorySession(session);
request.setResolveDependencies(true);
ArtifactRepository centralRepository = new MavenArtifactRepository();
centralRepository.setUrl("https://repo.maven.apache.org/maven2/");
centralRepository.setLayout(new DefaultRepositoryLayout());
request.setRemoteRepositories(Collections.singletonList(centralRepository));
ProjectBuildingResult result = projectBuilder.build(new File("pom.xml"), request);
result.getDependencyResolutionResult().getDependencies().forEach(dependency ->
System.out.println(
"Provided pom depends on: " +
dependency.getArtifact().getGroupId() +
":" + dependency.getArtifact().getGroupId() +
":" + dependency.getArtifact().getVersion()
)
);
但不幸的是,我在执行projectBuilder.build(new File("pom.xml"), request);
时出现了这样的错误
Caused by: org.apache.maven.model.building.ModelBuildingException:
15 problems were encountered while building the effective model for net.dahanne:maven-resolver:0.0.1-SNAPSHOT
[ERROR] Invalid artifact repository: null @
[ERROR] Failed to determine Java version for profile jdk8 @ io.dropwizard.metrics:metrics-parent:4.1.17, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/io/dropwizard/metrics/metrics-parent/4.1.17/metrics-parent-4.1.17.pom, line 160, column 22
[ERROR] Failed to determine Java version for profile doclint-java8-disable @ org.jboss:jboss-parent:36, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/org/jboss/jboss-parent/36/jboss-parent-36.pom, line 839, column 17
[ERROR] Failed to determine Java version for profile compile-java8-release-flag @ org.jboss:jboss-parent:36, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/org/jboss/jboss-parent/36/jboss-parent-36.pom, line 879, column 18
[ERROR] Failed to determine Java version for profile include-jdk-misc @ org.jboss:jboss-parent:36, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/org/jboss/jboss-parent/36/jboss-parent-36.pom, line 910, column 22
[ERROR] Failed to determine Java version for profile java8-test @ org.jboss:jboss-parent:36, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/org/jboss/jboss-parent/36/jboss-parent-36.pom, line 961, column 22
[ERROR] Failed to determine Java version for profile java9-mr-build @ org.jboss:jboss-parent:36, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/org/jboss/jboss-parent/36/jboss-parent-36.pom, line 998, column 22
[ERROR] Failed to determine Java version for profile java9-test @ org.jboss:jboss-parent:36, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/org/jboss/jboss-parent/36/jboss-parent-36.pom, line 1047, column 22
[ERROR] Failed to determine Java version for profile java10-mr-build @ org.jboss:jboss-parent:36, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/org/jboss/jboss-parent/36/jboss-parent-36.pom, line 1087, column 22
[ERROR] Failed to determine Java version for profile java10-test @ org.jboss:jboss-parent:36, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/org/jboss/jboss-parent/36/jboss-parent-36.pom, line 1139, column 22
[ERROR] Failed to determine Java version for profile java11-mr-build @ org.jboss:jboss-parent:36, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/org/jboss/jboss-parent/36/jboss-parent-36.pom, line 1182, column 22
[ERROR] Failed to determine Java version for profile java11-test @ org.jboss:jboss-parent:36, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/org/jboss/jboss-parent/36/jboss-parent-36.pom, line 1237, column 22
[ERROR] Failed to determine Java version for profile java12-mr-build @ org.jboss:jboss-parent:36, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/org/jboss/jboss-parent/36/jboss-parent-36.pom, line 1283, column 22
[ERROR] Failed to determine Java version for profile java12-test @ org.jboss:jboss-parent:36, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/org/jboss/jboss-parent/36/jboss-parent-36.pom, line 1341, column 22
[ERROR] Failed to determine Java version for profile java13-mr-build @ org.jboss:jboss-parent:36, /Users/anthony.dahanne/workspaces/maven-resolver/target/.m2/org/jboss/jboss-parent/36/jboss-parent-36.pom, line 1390, column 22
似乎maven解析器无法设置正在遍历的POM的属性
我有一个完整的github project to demo the issue,including CI
我也在Maven dev mailing list上发了帖子
谢谢
# 1 楼答案
组装请求时,需要将Java版本作为系统属性传递。对我起作用的是类似的东西:
问题来自
JdkVersionProfileActivator
类,它从系统属性显式检查java.version
属性的值编辑:我刚刚检查了链接的Github问题,其他人已经sent a PR使用了类似的解决方案,还有一些额外的改进,比如使用
System.getProperties()
来获取属性,而不是手动为其创建对象# 2 楼答案
HervéBoutemy通过github repo上的PR发送了修复程序,我在那里演示了这个问题——我确实错过了一些配置