[maven] 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 코드에서 액세스 할 수 있습니다.

제 경우에는이 속성 파일에 액세스해야하는 테스트 코드이므로 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]


답변

mvn clean package -DpropEnv=PROD

그런 다음 POM.xml에서 이와 같이 사용

<properties>
    <myproperty>${propEnv}</myproperty>
</properties>


답변