명령 줄에서 pom.xml
파일의 속성으로 인수를 전달할 수 있습니까? 예를 들어 나는 실행mvn ... argument
그리고 pom.xml에서
<properties>
<myproperty> here should add argument from command line</myproperty>
</properties>
도와 줘서 고마워.
명령 줄에서 pom.xml
파일의 속성으로 인수를 전달할 수 있습니까? 예를 들어 나는 실행mvn ... argument
그리고 pom.xml에서
<properties>
<myproperty> here should add argument from command line</myproperty>
</properties>
도와 줘서 고마워.
답변:
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 코드에서 액세스 할 수 있습니다.
제 경우에는이 속성 파일에 액세스해야하는 테스트 코드이므로 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>
그리고 명령 줄에서 :
mvn clean test -Dapp.env=LOCAL -Dapp.domain=localhost -Dapp.port=9901
따라서 이러한 속성은 Java 코드에서 액세스 할 수 있습니다.
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");
프로젝트 파일로 변수 이름을 지정할 수 있습니다. 예를 들어 플러그인 구성에서 아래와 같이 하나의 태그 만 제공하십시오.
<projectFile>${projectName}</projectFile>
그런 다음 명령 줄에서 프로젝트 이름을 매개 변수로 전달할 수 있습니다.
mvn [your-command] -DprojectName=[name of project]