Как передать параметр в плагин 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,

Таким образом, вам необходимо иметь следующее:

  1. Определите свойство 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,

  2. Настройте плагин для использования этого свойства Maven:

    <configuration>
      <sourceDestDir>${jaxws.sourceDestDir}</sourceDestDir>
    </configuration>
    
  3. Если вы хотите переопределить его, теперь вы можете сделать это прямо в командной строке с помощью -Djaxws.sourceDestDir=/my/new/value, Это системное свойство будет иметь приоритет над значением свойства Maven.

Другие вопросы по тегам