Maven의 명령 줄 인수를 pom.xml의 속성으로 전달


97

명령 줄에서 pom.xml파일의 속성으로 인수를 전달할 수 있습니까? 예를 들어 나는 실행mvn ... argument

그리고 pom.xml에서

<properties>
   <myproperty> here should add argument from command line</myproperty>
</properties>

도와 줘서 고마워.


당신은 요구하고 있지만 직접적으로 무엇을 받는다는 프로파일 이 유용 할 수 있습니다
시그

네 프로필에 대해 알고 있습니다. <projectFile> ... </ projectFile>에서 정의 된 프로젝트 이름 인 maven-soapui-plugin을 사용하고 있습니다. 약 10 개의 프로젝트가 있으며 모든 프로젝트의 새 프로필을 원하지 않습니다. 인수를 사용하여 mvn ... project1을 실행하고 project1을 실행하고 mvn ... project2를 project2를 실행하고
싶습니다

답변:


130

속성 예의 경우 다음을 수행하십시오.

mvn install "-Dmyproperty=my property from command line"

전체 속성 정의를 따옴표로 묶습니다. 속성에 공백이있는 경우 필요합니다.


17
또한 pom과 명령 줄에 속성이 모두있는 경우 명령 줄이 우선합니다. 재정의 가능한 기본값을 제공하는 데 유용 할 수 있습니다.
댄 카터

2
또한 다음과 같이 여러 인수를 전달할 수도 있습니다.mvn clean install "-Dprop1=value1" "-Dprop2=value2"
Sumit

14

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을 참조하십시오 .


어떤 프로필을 사용하고 있으므로 mvn clean -Pwin64입니까?
sendon1982

14

이 문제를 해결하기 위해 속성 플러그인을 사용했습니다.

속성은 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");

Java의 내 속성 파일이 $ {app.env}와 동일한 값을 제공하며 maven 명령 줄에서 선택하지 않습니다. 속성 이름이 이와 같은 값과 같아야합니까? <app.env> $ {app.env} </ app.env>
Sujith

6

프로젝트 파일로 변수 이름을 지정할 수 있습니다. 예를 들어 플러그인 구성에서 아래와 같이 하나의 태그 만 제공하십시오.

<projectFile>${projectName}</projectFile>

그런 다음 명령 줄에서 프로젝트 이름을 매개 변수로 전달할 수 있습니다.

mvn [your-command] -DprojectName=[name of project]

mvn 명령에서 브라우저 이름과 환경을 제공하고 싶습니다. 제공하지 않으면 기본값을 선택합니다. 그렇게하는 방법?
paul

1
mvn clean package -DpropEnv=PROD

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

<properties>
    <myproperty>${propEnv}</myproperty>
</properties>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.