Maven을 사용한 환경 변수


87

Eclipse에서 Maven으로 프로젝트를 포팅했으며 프로젝트가 작동하도록 환경 변수를 설정해야합니다.

Eclipse에서 "실행-> 구성 실행"으로 이동하고 "환경"탭에서 "WSNSHELL_HOME"을 "conf"값으로 설정합니다.

Maven으로 어떻게 할 수 있습니까?

대단히 감사합니다!


환경 변수없이 프로젝트를 실행하는 것이 좋습니다. 그런 다음 maven으로 이동하십시오.
khmarbaise 2011

3
시스템에 유용하고 내 솔루션이 작동한다고 확신하는 경우 환경 변수 사용을 건너 뛸 이유가 없습니다 (직접 사용합니다). 'System.getenv'/ 'System.getProperty'에 대한 내 힌트를 참조하십시오.
FrVaBe 2011

답변:


124

명령 줄에서 다음과 같이 전달할 수 있습니다.

mvn -DmyVariable=someValue install

[업데이트] 매개 변수의 순서는 중요 합니다. 명령 전에 옵션을 지정해야합니다 . [/최신 정보]

POM 파일 내에서 시스템 변수 (명령 줄 또는 pom에 지정됨)를로 참조 ${myVariable}하고 환경 변수를 ${env.myVariable}. (수정에 대한 댓글 작성자에게 감사드립니다.)

업데이트 2

좋습니다. 시스템 변수를 테스트에 전달하려고합니다. 내가 가정 했듯이 테스트를 위해 Surefire 플러그인 을 사용하는 경우 가장 좋은 방법은 plugins섹션 에서 필요한 시스템 변수를 pom 내에서 지정하는 것입니다.

<build>
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            ...
            <configuration>
                ...
                <systemPropertyVariables>
                    <WSNSHELL_HOME>conf</WSNSHELL_HOME>
                </systemPropertyVariables>
            </configuration>
        </plugin>
        ...
    </plugins>
</build>

'mvn test'를 시작해야합니다. 작동하지 않는 것 같습니다. mvn test -DWSNSHELL_HOME = conf를 작성하면 여전히 예외가 발생합니다. java.io.FileNotFoundException : null / wsnshell.conf (해당 파일 또는 디렉터리 없음)
Gianluca

3
@Janky, 다른 방법으로 시도해보십시오 mvn -DWSNSHELL_HOME=conf test.
Péter Török

nope ... :( 여전히 java.io.FileNotFoundException : null / wsnshell.conf (해당 파일 또는 디렉토리 없음) ... 코드에서이 방식으로 변수를 읽었 System.getenv("WSNSHELL_HOME");습니다. 맞습니까?
Gianluca

@Janky, 잠깐만 요. Maven 빌드에서 직접 앱을 실행합니까, 아니면 ...?
Péter Török

47
두 사람은 환경 변수와 시스템 속성을 혼동하고 있습니다. -D 명령 옵션은 시스템 속성 만 설정합니다.
Wouter Lievens 2014 년

26

-D특성은 확실한-pluging 테스트에에서 신뢰할 수있는 전파되지 않습니다 (이 이클립스와 함께 작동 이유를 모르겠어요). 명령 줄에서 maven을 사용할 때 argLine 속성을 사용하여 속성을 래핑합니다. 이것은 당신의 테스트를 통과합니다

mvn -DargLine="-DWSNSHELL_HOME=conf" test

System.getProperty코드에서 값을 읽는 데 사용 합니다. 및 의 차이점에 대해이 게시물을 살펴보십시오 .System.getenvSytem.getProperty


2
System.getenv를 사용하는 대신 System.getProperty ( "WSNSHELL_HOME")로 속성을 읽어야합니다.
FrVaBe 2011

완벽합니다. 다른 일을 시도하는 데 많은 시간을 보낸 후 이것은 저에게 효과적이었습니다.
Bhushan 2014

pom.xml에서 surefire 플러그인에 대한 argLine 매개 변수를 구성한 경우 ${argLine}자리 표시자를 추가합니다 . 그렇지 않으면 명령 줄의 매개 변수가 선택되지 않습니다. 예 :<argLine>-Duser.timezone=UTC ${argLine}</argLine>
sorrymissjackson 2018

이것은 나를 위해 일했습니다, 감사합니다! Maven 테스트를 위해 sys-props를 구성하는 멋진 도구입니다. 여전히 얼핏 보면 매우 혼란스럽고 직접 사용할 수 없지만 추가 인수가 필요한 이유입니다.
파이

10

bash 스크립트에서 maven 명령을 래핑 할 수 있습니다.

#!/bin/bash

export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR

놀랍게도 이것은 Surefire 플러그인을 사용하여 완전히 작동 한 유일한 방법입니다. POM에서 설정 한 10 개 정도의 환경 변수 중 두 개는 테스트 실행시 표시되지 않습니다. 셸에 설정 한 다음 mvn install, 그래도 여전히 가려져 있습니다. 그러나 쉘 스크립트에서 실행하면 잘 작동합니다! 왜 이런 일이 발생하는지 이해했으면합니다.
Pete

나는 이것이 가장 간단한 해결책이기 때문에 이것이 허용 해답이 될 것으로 판단
wtsiamruk가

5

Maven의 환경 변수는 아래와 같이 설정할 수 있습니다.

http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#environmentVariables http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html #환경 변수

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    ...
    <configuration>
        <includes>
            ...
        </includes>
        <environmentVariables>
            <WSNSHELL_HOME>conf</WSNSHELL_HOME>
        </environmentVariables>
    </configuration>
</plugin>

4

properties-maven- plugin이라는 maven 플러그인 이 있는데 이것은 set-system-properties시스템 변수를 설정 하는 목표 를 제공 합니다. 이러한 속성이 모두 포함 된 파일이있는 경우 특히 유용합니다. 따라서 속성 파일을 읽고 시스템 변수로 설정할 수 있습니다.


3

또 다른 해결책은 (또는 창) MAVEN_OPTS에서 ${user.home}/.mavenrc(또는 다른 환경 변수) 를 설정하는 것 %HOME%\mavenrc_pre.bat입니다.

Maven 3.3.1부터 실제로 원하는 경우 mvn 명령 줄 매개 변수를 설정할 수 있는 새로운 가능성 이 있습니다.

  • ${maven.projectBasedir}/.mvn/maven.config
  • ${maven.projectBasedir}/.mvn/jvm.config

1

코드에 다음을 추가하십시오.

System.getProperty("WSNSHELL_HOME")

maven 명령에서 값 속성을 수정하거나 추가합니다.

mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue

Eclipse에서 실행하려면 디버그 / 실행 구성에 VM 인수를 추가하십시오.

  • 실행-> 구성 실행으로 이동하십시오.
  • 탭 인수 선택
  • VM 인수 섹션에 추가

-DWSNSHELL_HOME = 귀하의 가치

이미지 예보기

POM을 수정할 필요가 없습니다.


1

@Kevin의 답변의 문서에 따라 아래 내용은 maven 확실한 플러그인으로 환경 변수를 설정하는 데 도움이되었습니다.

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
    <environmentVariables>
        <WSNSHELL_HOME>conf</WSNSHELL_HOME>
    </environmentVariables>
</configuration>

0

_JAVA_OPTIONS변수를 통해 일부 인수를 전달할 수 있습니다 .

예를 들어 다음과 같이 maven 프록시 플래그에 대한 변수를 정의합니다.

_JAVA_OPTIONS="-Dhttp.proxyHost=$http_proxy_host -Dhttp.proxyPort=$http_proxy_port -Dhttps.proxyHost=$https_proxy_host -Dhttps.proxyPort=$http_proxy_port"

그런 다음 사용하십시오 mvn clean install(자동으로 선택됩니다 _JAVA_OPTIONS).

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