Не совсем то, о чем вы просите, но профили maven могут быть полезны для этого
Sig
да, я знаю о профилях. Я использую maven-soapui-plugin, где в <projectFile> ... </projectFile> указано имя проекта. У меня около 10 проектов, и я не хочу для каждого проекта новый профиль. Я хочу использовать аргумент для запуска mvn ... project1 для запуска project1 и mvn ... project2 для запуска
project2
Ответы:
134
Для вашего примера собственности сделайте:
mvn install "-Dmyproperty=my property from command line"
Обратите внимание на цитаты вокруг определения всего свойства. Они вам понадобятся, если в вашей собственности есть пробелы.
Также обратите внимание, что если у вас есть и свойство в pom, и в командной строке, командная строка имеет приоритет. Это может быть полезно для предоставления переопределяемых значений по умолчанию.
Дэн Картер
2
Мы также можем передать несколько аргументов, например:mvn clean install "-Dprop1=value1" "-Dprop2=value2"
Sumit
15
Я использовал плагин свойств, чтобы решить эту проблему.
Свойства определяются в pom и записываются в файл my.properties, где затем к ним можно получить доступ из вашего кода Java.
В моем случае это тестовый код, который должен получить доступ к этому файлу свойств, поэтому в pom файл свойств записывается в maven testOutputDirectory:
Для тех, кто ищет более полный пример (мне потребовалось немного повозиться, чтобы заставить это работать, так как я не понимал, как именование тегов свойств влияет на возможность их извлечения в другом месте файла pom), мой pom выглядит следующим образом:
Мой файл свойств в java дает то же значение, что и $ {app.env}, он не выбирает его из командной строки maven, должно ли имя свойства быть равным значению, подобному этому? <app.env> $ {app.env} </ app.env>
Ответы:
Для вашего примера собственности сделайте:
Обратите внимание на цитаты вокруг определения всего свойства. Они вам понадобятся, если в вашей собственности есть пробелы.
источник
mvn clean install "-Dprop1=value1" "-Dprop2=value2"
Я использовал плагин свойств, чтобы решить эту проблему.
Свойства определяются в pom и записываются в файл my.properties, где затем к ним можно получить доступ из вашего кода Java.
В моем случае это тестовый код, который должен получить доступ к этому файлу свойств, поэтому в pom файл свойств записывается в maven testOutputDirectory:
<configuration> <outputFile>${project.build.testOutputDirectory}/my.properties</outputFile> </configuration>
Используйте outputDirectory, если вы хотите, чтобы свойства были доступны для кода вашего приложения:
<configuration> <outputFile>${project.build.outputDirectory}/my.properties</outputFile> </configuration>
Для тех, кто ищет более полный пример (мне потребовалось немного повозиться, чтобы заставить это работать, так как я не понимал, как именование тегов свойств влияет на возможность их извлечения в другом месте файла pom), мой pom выглядит следующим образом:
<dependencies> <dependency> ... </dependency> </dependencies> <properties> <app.env>${app.env}</app.env> <app.port>${app.port}</app.port> <app.domain>${app.domain}</app.domain> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.20</version> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <version>1.0.0</version> <executions> <execution> <phase>generate-resources</phase> <goals> <goal>write-project-properties</goal> </goals> <configuration> <outputFile>${project.build.testOutputDirectory}/my.properties</outputFile> </configuration> </execution> </executions> </plugin> </plugins> </build>
И в командной строке:
Таким образом, к этим свойствам можно получить доступ из кода Java:
источник
Внутри pom.xml
<project>
.....
<profiles> <profile> <id>linux64</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <build_os>linux</build_os> <build_ws>gtk</build_ws> <build_arch>x86_64</build_arch> </properties> </profile> <profile> <id>win64</id> <activation> <property> <name>env</name> <value>win64</value> </property> </activation> <properties> <build_os>win32</build_os> <build_ws>win32</build_ws> <build_arch>x86_64</build_arch> </properties> </profile> </profiles>
.....
<plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>target-platform-configuration</artifactId> <version>${tycho.version}</version> <configuration> <environments> <environment> <os>${build_os}</os> <ws>${build_ws}</ws> <arch>${build_arch}</arch> </environment> </environments> </configuration> </plugin>
.....
В этом примере, когда вы запускаете pom без аргументов,
mvn clean install
будет выполнен профиль по умолчанию.При исполнении с
mvn -Denv=win64 clean install
Профиль win64 будет выполнен.
См. Http://maven.apache.org/guides/introduction/introduction-to-profiles.html
источник
Вы можете давать имена переменным как файлы проекта. Например, в конфигурации вашего плагина укажите только один тег, как показано ниже: -
<projectFile>${projectName}</projectFile>
Затем в командной строке вы можете передать имя проекта в качестве параметра: -
источник
Затем, используя это в POM.xml
<properties> <myproperty>${propEnv}</myproperty> </properties>
источник