MavenProject getArtifacts возвращает другой список в модуле при вызове из родительского - PullRequest
0 голосов
/ 05 мая 2018

В Mojo мне нужно сканировать все зависимости модуля, где это плагин, для этого я использую mavenProject.getArtifacts (). Это прекрасно работает, если я собираю модуль напрямую, поэтому не от родителя, а просто вызываю «mvn clean package» в каталоге модуля. В этом случае я получаю все зависимости этого модуля.

Однако, если я собираю весь проект, то когда сборка достигает модуля, я получаю совершенно другой набор зависимостей. Я не понимаю почему. Плагин определяется в pom модуля.

MavenProject получен в Моджо:

@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 голосов
/ 06 мая 2018

Набор отдохнувших глаз: проблема не в том, что MavenProject внедряется, а в пользовательском URLStreamHandler, обрабатывающем его. Обработчик обработал URI "classpath: / path / to / resource", такой обработчик должен быть зарегистрирован в URL.setURLStreamHandlerFactory, и этот метод разрешается вызывать только один раз, пока JVM жива. Класс Mojo создается каждый раз, даже каждый раз вызывается даже static {}, поэтому после первого вызова Mojo регистрация вызовов не удалась. Связанное исключение поймано, но эта ситуация была не очень очевидна, потому что обработчик был написан в строке, используя лямбда-выражения.

Во всяком случае, он блокирует список файлов артефактов, которые обрабатывает обработчик, до первого создания экземпляра Mojo.

Теперь способ обойти это. Нужно как-то соединить этот первый экземпляр с переменной экземпляра ...

...