1
我想在maven中實現一種通過env變量將變量傳遞給POM的方式,但如果未提供,則使用默認值。Maven變量優先級:如何讓env變量比在pom.xml中的硬編碼值更重要?
我創建了minimalitic pom.xml
,打印FOO
和FOOBAR
變量。 FOOBAR
有默認值:
<project>
<groupId>com.example</groupId>
<artifactId>test</artifactId>
<version>sprint-SNAPSHOT</version>
<modelVersion>4.0.0</modelVersion>
<properties>
<FOOBAR>1111111</FOOBAR>
</properties>
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>1.1</version>
<executions><execution>
<phase>validate</phase><goals><goal>run</goal></goals>
<configuration><tasks>
<echo>FOO = ${FOO}</echo>
<echo>FOOBAR = ${FOOBAR}</echo>
</tasks></configuration>
</execution></executions>
</plugin></plugins></build>
</project>
現在,讓我們試着通過命令行傳遞一個值來運行,或通過環境變量:
[email protected] /d/mvn-tests
$ mvn install | grep FOO
[echo] FOO = ${FOO}
[echo] FOOBAR = 1111111
[email protected] /d/mvn-tests
$ mvn install -DFOO=999 | grep FOO
[echo] FOO = 999
[echo] FOOBAR = 1111111
[email protected] /d/mvn-tests
$ FOO=999 mvn install | grep FOO
[echo] FOO = 999
[echo] FOOBAR = 1111111
[email protected] /d/mvn-tests
$ mvn install -DFOOBAR=555 | grep FOO
[echo] FOO = ${FOO}
[echo] FOOBAR = 555
[email protected] /d/mvn-tests
$ FOOBAR=555 mvn install | grep FOO
[echo] FOO = ${FOO}
[echo] FOOBAR = 1111111
最後一個場景是一個我不比如:我更喜歡env變量優先於XML頂部定義的屬性(我希望XML中的硬編碼是最後一個檢查)。
如此看來,Maven的優先級如下:
Command line param > hardcoded XML value > env variable
我想有:
Command line param > env variable > hardcoded XML value
有沒有一種方法可以讓我達到我想要的行爲?
我發現我可以使用env.FOOBAR
明確地指向環境變量:
...
<echo>FOO = ${FOO}</echo>
<echo>FOOBAR = ${FOOBAR}</echo>
<echo>env.FOOBAR = ${env.FOOBAR}</echo>
然後
[email protected] /d/mvn-tests
$ FOOBAR=15 mvn install | grep FOO
[echo] FOO = ${FOO}
[echo] FOOBAR = 1111111
[echo] env.FOOBAR = 15
但如何在pom.xml
某物說,在一個JS文件將是${env.FOOBAR || FOOBAR}
即從env中取一個,如果沒有指定,那就換另一個?