【问题标题】:How to set an environment variable in maven depending on the OS如何根据操作系统在maven中设置环境变量
【发布时间】:2013-10-17 05:01:24
【问题描述】:

我对 Maven 还很陌生。我已经设置了一个 pom.xml,它定义了一个用于运行我的单元测试的配置文件。我正在尝试设置 Path 环境变量。环境变量名称是 Windows 的 Path 和 Linux 的 LD_LIBRARY_PATH。我不想继续改变这些环境。变量名称取决于操作系统。我应该如何做到这一点?

<profile>
        <id>integration-tests</id>
        <build>
         <plugins>
            <plugin>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>tycho-surefire-plugin</artifactId>
                <version>${tychoVersion}</version>
                <configuration combine.self="override">
                    <argLine>${tycho.testArgLine} ${global.test.vmargs} ${bundle.test.vmargs}</argLine>
                    <forkMode>${bundle.test.forkMode}</forkMode>
                    <useUIHarness>${bundle.test.useUIHarness}</useUIHarness>
                    <useUIThread>${bundle.test.useUIThread}</useUIThread>
                    <environmentVariables>
                      <!--For windows change LD_LIBRARY_PATH to PATH-->
                        <LD_LIBRARY_PATH>${dependenciesDir}${path.separator}{env.LD_LIBRARY_PATH}</LD_LIBRARY_PATH>

                    </environmentVariables>
                </configuration>
            </plugin>
        </plugins>
        </build>

    </profile>

【问题讨论】:

    标签: linux windows maven


    【解决方案1】:

    Profile activation 在这里可能会有所帮助。从集成测试配置文件中删除 &lt;environmentVariables&gt; 配置。然后添加下面的配置文件,调整&lt;activation&gt; 部分以满足特定要求。您无需在命令行上显式启用这些配置文件; Maven 将根据正在运行构建的系统激活正确的配置文件。

    <profile>
      <id>windows-tests</id>
      <activation>
          <os>
            <family>Windows</family>
          </os>
      </activation>
      <build>
         <plugins>
            <plugin>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>tycho-surefire-plugin</artifactId>
                <version>${tychoVersion}</version>
                <configuration>
                    <environmentVariables>
                        <PATH>${dependenciesDir}${path.separator}{env.PATH}</PATH>
                    </environmentVariables>
                </configuration>
            </plugin>
        </plugins>
        </build>
    </profile>
    <profile>
      <id>linux-tests</id>
      <activation>
          <os>
            <family>Linux</family>
          </os>
      </activation>
      <build>
         <plugins>
            <plugin>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>tycho-surefire-plugin</artifactId>
                <version>${tychoVersion}</version>
                <configuration>
                    <environmentVariables>
                        <LD_LIBRARY_PATH>${dependenciesDir}${path.separator}{env.LD_LIBRARY_PATH}</LD_LIBRARY_PATH>
    
                    </environmentVariables>
                </configuration>
            </plugin>
        </plugins>
        </build>
    </profile>
    

    【讨论】:

    • 有没有办法将此激活条件组合到一个配置文件中?
    • 我不知道。你想要一个运行在 Linux 上,一个运行在 Windows 上。这些是完全不同的操作系统,因此完全不同的激活标准。不幸的是,配置文件激活没有“条件 1 或条件 2”的概念。我似乎记得看到请求这种功能的 JIRA 问题,不确定状态是什么。
    • 你好,我也有同样的问题,在linux下没问题,LD_LIBRARY_PATH是正确定义的,但是对于windows配置文件,我的路径没有改变......所以问题仍然存在:(我做了一个复制/粘贴您的解决方案并更改版本,我没有使用 tycho,而是使用 maven-surefire-plugin。感谢您的帮助
    • 也许配置文件中指定的family 的值不是操作系统使用的值。有rules 用于操作系统确定。检查系统上相应属性的值并在配置文件中使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2017-07-02
    • 2018-11-18
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2018-12-13
    相关资源
    最近更新 更多