Maven - пройти аргумент для использования в Exec-Maven-Plugin
-
26-09-2019 - |
Вопрос
В моем POM я добавил плагин Exec-Maven, чтобы вызвать класс Java, который будет генерировать файл. Этот класс требует, чтобы некоторые параметры были переданы в основной способ, одно из них - это местоположение входного файла (за пределами проекта). До сих пор я использовал относительный путь для этого, который работает нормально:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.laco.projectmaster.util.LanguageGenerator</mainClass>
<arguments>
<argument>../PM-Config/dev/PMLanguage.xls</argument>
<argument>PM4.0</argument>
<argument>${project.build.outputDirectory}/com/laco/projectmaster/props/resources</argument>
<argument>ProjectMaster</argument>
<argument>Created during maven build (POM Version: ${pom.version})</argument>
</arguments>
</configuration>
</plugin>
Теперь я начинаю использовать HUDSON для установки / пакета и развертываю войны, и я не могу больше использовать этот относительный путь. Просто я подумал, я просто передаю местоположение входного файла при вызове Maven вроде:
MVN Clean Package -DlangDir = C: / komedir
а затем изменить помпутку как:
<argument>${langdir}/PMLanguage.xls</argument>
Однако этот параметр просто игнорируется здесь. Путь основным классом получает в качестве аргумента становится null / pmlanguage.xls. Отказ Сам параметр доступен в Maven, я проверен с Suduce с помощью эха в плагине Antrun. Правильный путь был эхом.
Праметре, которые вы проходите к Maven, то недоступен по умолчанию, независимо от того, где вы ссылаетесь на них в POM?
Спасибо за любую помощь,
Stijn.
Решение
Я не могу воспроизвести проблему. Я использовал следующий класс теста:
package com.stackoverflow.q3421918;
public class Hello
{
public static void main( String[] args )
{
System.out.println( args[0] + " " + args[1] );
}
}
И следующий POM.XML:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stackoverflow.q3421918</groupId>
<artifactId>Q3421918</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- this was a test for a workaround -->
<properties>
<myprop>${langdir}</myprop>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.stackoverflow.q3421918.Hello</mainClass>
<arguments>
<argument>${myprop}</argument>
<argument>${langdir}</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
</project>
И вот вывод я получаю:
$ MVN Чистый пакет -dlangdir = c: / somedir [info] сканирование для проектов ... [информация] ------------------------------- -------------------------------------------------- [info] Здание Q3421918 [Info] целевой сегмент: [Чистый, пакет] [Информация] ----------------------------------------- ----------------------------------------- ... [Информация] Подготовка Exec: Java [Предупреждение] Удаление: Java от раздвоенного жизненного цикла, чтобы предотвратить рекурсивный вызов. [Info] Никаких целей, необходимых для проекта - пропуск [info] [exec: java {выполнение: по умолчанию}] Здравствуйте c: / somedir c: / somediр [info] ------------------ ------------------------------------------------------- -------- [info] Создать успешную [информацию] ---------------------------------------- ------------------------------------------ ...
Проверено с Maven 2.2.1.