Как передать параметр в плагин Maven из CLI?
<build>
<plugins>
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>wsimport</goal>
</goals>
<id>generate-sei</id>
<configuration>
<sourceDestDir>${project.basedir}/src/main/java</sourceDestDir>
</configuration>
</execution>
</executions>
<dependencies>...</dependencies>
</plugin>
</plugins>
</build>
Приведенный выше фрагмент XML взят из файла POM в проекте Java. В этом фрагменте я определил jaxws-maven-plugin для использования файла wsdl для генерации кода SEI и помещения его в каталог src/main/java. Этот плагин связан с фазой создания источников и работает нормально.
Я хочу сделать так, чтобы, если я выпущу плагин напрямую, используя:
mvn jaxws:wsimport
он должен поместить файлы в вышеупомянутую папку. На справочном сайте плагинов ( https://jax-ws-commons.java.net/jaxws-maven-plugin/wsimport-mojo.html) я не могу понять, как передать параметр (sourceDestDir) в качестве команды Строковый аргумент. Есть ли способ, которым я могу это сделать?
1 ответ
ВНИМАНИЕ /!\
Вы пытаетесь сгенерировать источники в папке источника src/main/java
, Если нет очень веской причины, не делайте этого. Весь сгенерированный контент всегда должен быть помещен в каталог сборки (target
по умолчанию) и не контролируется версиями. Вы всегда можете добавить сгенерированные источники в качестве исходной папки, используя build-helper-maven-plugin:add-source
, если плагин не делает это уже сам.
Чтобы иметь возможность устанавливать параметры непосредственно в командной строке, плагин должен определить пользовательское свойство. Тем не менее org.jvnet.jax-ws-commons:jaxws-maven-plugin
не определяет пользовательское свойство для sourceDestDir
параметр. Это заметно, потому что в документации не задано "свойство пользователя".
Вы также можете найти это в исходном коде:
@Parameter(defaultValue = "${project.build.directory}/generated-sources/wsimport") private File sourceDestDir;
@Parameter
аннотация, используемая для объявления параметра плагина Maven, не имеет соответствующей property
,
Таким образом, вам необходимо иметь следующее:
Определите свойство Maven
jaxws.sourceDestDir
со значением${project.basedir}/src/main/java
с<properties> <jaxws.sourceDestDir>${project.basedir}/src/main/java</jaxws.sourceDestDir> </properties>
Желательно, чтобы вы
${project.build.directory}/some/path
вместоsrc/main/java
,Настройте плагин для использования этого свойства Maven:
<configuration> <sourceDestDir>${jaxws.sourceDestDir}</sourceDestDir> </configuration>
Если вы хотите переопределить его, теперь вы можете сделать это прямо в командной строке с помощью
-Djaxws.sourceDestDir=/my/new/value
, Это системное свойство будет иметь приоритет над значением свойства Maven.