簡體   English   中英

使用 Maven 的環境變量

[英]Environment Variable with Maven

我已經將一個項目從 Eclipse 移植到 Maven,我需要設置一個環境變量來使我的項目工作。

在 Eclipse 中,我轉到“運行 -> 運行配置”,然后在“環境”選項卡下,將“WSNSHELL_HOME”設置為值“conf”。

我怎樣才能用Maven做到這一點?

您可以在命令行上傳遞它,如

mvn -DmyVariable=someValue install

[更新]請注意,參數的順序很重要 - 您需要在命令之前指定任何選項。 [/更新]

在 POM 文件中,您可以將系統變量(在命令行或 pom 中指定)稱為${myVariable} ,將環境變量稱為${env.myVariable} (感謝評論者的更正。)

更新2

好的,所以你想將你的系統變量傳遞給你的測試。 如果 - 正如我所假設的 - 你使用Surefire 插件進行測試,最好是在 pom 中指定所需的系統變量,在你的plugins部分,例如

<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>

-D屬性不會可靠地從 surefire-pluging 傳播到您的測試(我不知道為什么它適用於 eclipse)。 在命令行上使用 maven 時,使用argLine屬性來包裝您的屬性。 這會將它們傳遞給您的測試

mvn -DargLine="-DWSNSHELL_HOME=conf" test

使用System.getProperty讀取代碼中的值。 看看這篇關於System.getenvSytem.getProperty的區別的帖子。

您可以將 maven 命令包裝在 bash 腳本中:

#!/bin/bash

export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR

對於 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>

另一種解決方案是在${user.home}/.mavenrc (或 Windows 上的%HOME%\mavenrc_pre.bat )中設置MAVEN_OPTS (或其他環境變量)。

由於 Maven 3.3.1 有新的可能性來設置 mvn 命令行參數,如果這是你真正想要的:

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

根據@Kevin's answer的文檔,下面的文檔對我有用,用於使用 maven sure-fire 插件設置環境變量

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

有一個名為properties-maven-plugin 的 maven 插件,它提供了一個目標set-system-properties來設置系統變量。 如果您有一個包含所有這些屬性的文件,這將特別有用。 因此,您可以讀取屬性文件並將它們設置為系統變量。

在您的代碼中添加:

System.getProperty("WSNSHELL_HOME")

從 maven 命令修改或添加 value 屬性:

mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue

如果您想在 Eclipse 中運行它,請在您的 Debug/Run 配置中添加 VM 參數

  • 轉到運行 -> 運行配置
  • 選擇選項卡參數
  • 添加部分 VM 參數

-DWSNSHELL_HOME=你的價值

查看圖片示例

你不需要修改 POM

您可以通過_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 )。

我建議使用神奇的工具direnv 使用它,您可以在 cd 進入項目后注入環境變量。 這些步驟對我有用:

.envrc 文件

source_up
dotenv

.env 文件

_JAVA_OPTIONS="-DYourEnvHere=123"

由於有人最終可能會在這里更改他的全局 Java 選項,我想說定義_JAVA_OPTIONS是一個壞主意。 而是定義MAVEN_OPTS環境變量,它仍然會被 Maven 自動拾取,但它不會覆蓋像 _JAVA_OPTS 所做的一切(例如 IDE vm 選項)。

MAVEN_OPTS="-DmyVariable=someValue"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM