从父级调用时,MavenProject getArtifacts返回模块上的不同列表

时间:2018-05-05 08:10:58

标签: maven maven-3 maven-dependency maven-mojo

在Mojo中我需要扫描所有模块的依赖项,它是一个插件,因为我使用了mavenProject.getArtifacts()。如果我直接构建模块,这样工作正常,所以不是从父模块,而是在de模块的目录中调用“mvn clean package”。在这种情况下,我得到该模块的所有依赖项。

但是,如果我构建整个项目,那么当构建到达模块时,我会得到一组完全不同的依赖项。我不懂为什么。该插件在模块的pom中定义。

mavenProject是在Mojo中获得的:

@Parameter(readonly = true, defaultValue = "${project}")
private MavenProject mavenProject;

当然包括:

requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME

如果我直接构建模块,我会得到这个:

Examining jar:file:/C:/Users/tbeuge/.m2/repository/com/planon-fm/planonee/PlanonUX/201501.0.33.0/PlanonUX-201501.0.33.0.jar!/model.xml
Examining jar:file:/C:/Users/tbeuge/.m2/repository/com/planon/tms/scheduler/SchedulerService/1.1.2/SchedulerService-1.1.2.jar!/model.xml
Examining jar:file:/C:/Users/tbeuge/.m2/repository/org/mockito/mockito-core/2.12.0/mockito-core-2.12.0.jar!/model.xml
Examining jar:file:/C:/Users/tbeuge/.m2/repository/com/google/guava/guava/23.6-jre/guava-23.6-jre.jar!/model.xml
Examining jar:file:/C:/Users/tbeuge/.m2/repository/nl/planon/querybuilder/querybuilder-api-impl/3.0.4/querybuilder-api-impl-3.0.4.jar!/model.xml
Examining jar:file:/C:/Users/tbeuge/.m2/repository/com/planon/tms/lib/sx/sx-utils201210/2.1.0/sx-utils201210-2.1.0.jar!/model.xml
Examining jar:file:/C:/Users/tbeuge/.m2/repository/nl/planon/querybuilder/querybuilder-api/1.2.0/querybuilder-api-1.2.0.jar!/model.xml
Examining jar:file:/C:/Users/tbeuge/.m2/repository/com/planonsoftware/hades/17.0.4.9-1/hades-17.0.4.9-1.jar!/model.xml
Examining jar:file:/C:/Users/tbeuge/.m2/repository/junit/junit/4.12/junit-4.12.jar!/model.xml
Examining jar:file:/C:/Users/tbeuge/.m2/repository/com/planon/tms/myclient/myclient-shared/1/myclient-shared-1.jar!/model.xml

如果模块是作为整个项目的一部分构建的,我得到:

Examining jar:file:/C:/Users/tbeuge/.m2/repository/org/mockito/mockito-core/2.12.0/mockito-core-2.12.0.jar!/model.xml
Examining jar:file:/C:/Users/tbeuge/.m2/repository/junit/junit/4.12/junit-4.12.jar!/model.xml
Examining jar:file:/C:/Users/tbeuge/.m2/repository/org/apache/commons/commons-lang3/3.7/commons-lang3-3.7.jar!/model.xml

有人可以解释为什么我为同一个模块获得不同的依赖关系吗?

1 个答案:

答案 0 :(得分:0)

Resated set of eyes:问题不在于MavenProject被注入,而是在自定义URLStreamHandler处理它。处理程序处理了一个“classpath:/ path / to / resource”URI,这样的处理程序需要在URL.setURLStreamHandlerFactory中注册,只要JVM处于活动状态,就只允许调用该方法一次。 Mojo类每次都被实例化,甚至每次调用static {},因此在第一次Mojo实例化之后注册调用失败。捕获了相关的异常,但这种情况并不是很明显,因为处理程序是使用lambda进行内联编写的。

无论如何,它将处理程序进程的工件jar列表锁定到Mojo的第一个实例化。

现在解决这个问题。需要以某种方式从第一个实例化桥接到实例变量......