在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
有人可以解释为什么我为同一个模块获得不同的依赖关系吗?
答案 0 :(得分:0)
Resated set of eyes:问题不在于MavenProject被注入,而是在自定义URLStreamHandler处理它。处理程序处理了一个“classpath:/ path / to / resource”URI,这样的处理程序需要在URL.setURLStreamHandlerFactory中注册,只要JVM处于活动状态,就只允许调用该方法一次。 Mojo类每次都被实例化,甚至每次调用static {},因此在第一次Mojo实例化之后注册调用失败。捕获了相关的异常,但这种情况并不是很明显,因为处理程序是使用lambda进行内联编写的。
无论如何,它将处理程序进程的工件jar列表锁定到Mojo的第一个实例化。
现在解决这个问题。需要以某种方式从第一个实例化桥接到实例变量......