Maven의 명령 줄 인수를 pom.xml의 속성으로 전달
명령 줄에서 pom.xml
파일의 속성으로 인수를 전달할 수 있습니까? 예를 들어 나는 실행mvn ... argument
그리고 pom.xml에서
<properties>
<myproperty> here should add argument from command line</myproperty>
</properties>
도와 줘서 고마워.
속성 예의 경우 다음을 수행하십시오.
mvn install "-Dmyproperty=my property from command line"
전체 속성 정의를 따옴표로 묶습니다. 속성에 공백이있는 경우 필요합니다.
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을 참조하십시오 .
이 문제를 해결하기 위해 속성 플러그인을 사용했습니다.
속성은 pom에 정의되고 my.properties 파일에 기록되어 Java 코드에서 액세스 할 수 있습니다.
In my case it is test code that needs to access this properties file, so in the pom the properties file is written to maven's testOutputDirectory:
<configuration>
<outputFile>${project.build.testOutputDirectory}/my.properties</outputFile>
</configuration>
Use outputDirectory if you want properties to be accessible by your app code:
<configuration>
<outputFile>${project.build.outputDirectory}/my.properties</outputFile>
</configuration>
For those looking for a fuller example (it took me a bit of fiddling to get this working as I didn't understand how naming of properties tags affects ability to retrieve them elsewhere in the pom file), my pom looks as follows:
<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>
And on the command line:
mvn clean test -Dapp.env=LOCAL -Dapp.domain=localhost -Dapp.port=9901
So these properties can be accessed from the Java code:
java.io.InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("my.properties");
java.util.Properties properties = new Properties();
properties.load(inputStream);
appPort = properties.getProperty("app.port");
appDomain = properties.getProperty("app.domain");
You can give variable names as project files. For instance in you plugin configuration give only one tag as below:-
<projectFile>${projectName}</projectFile>
Then on command line you can pass the project name as parameter:-
mvn [your-command] -DprojectName=[name of project]
'developer tip' 카테고리의 다른 글
Bash에서 eval을 피해야하는 이유는 무엇이며 대신 무엇을 사용해야합니까? (0) | 2020.09.14 |
---|---|
CMake를 사용하여 Visual Studio C ++ 프로젝트 파일 생성 (0) | 2020.09.14 |
PostgreSQL의 계산 / 계산 / 가상 / 파생 열 (0) | 2020.09.14 |
.Net 4.0의 새로운 튜플 유형이 값 유형 (구조체)이 아닌 참조 유형 (클래스) 인 이유 (0) | 2020.09.14 |
numpy.array 동등성을 주장하는 가장 좋은 방법은 무엇입니까? (0) | 2020.09.14 |