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

MavenProject getArtifacts returns different list on module when call from parent

在 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

任何人都可以解释为什么我对同一个模块有不同的依赖关系吗?

休息的眼睛:问题不在注入的 MavenProject 中,而在处理它的自定义 URLStreamHandler 中。处理程序处理了一个 "classpath:/path/to/resource" URI,这样的处理程序需要在 URL.setURLStreamHandlerFactory 中注册,并且只要 JVM 处于活动状态,该方法就只能被调用一次。 Mojo class 每次都被实例化,连 static {} 每次都被调用,所以第一次 Mojo 实例化后注册调用失败。关联的异常被捕获,但这种情况不是很明显,因为处理程序是使用 lambda 内联编写的。

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

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