maven - 如何在每次运行时在 Maven 中设置环境变量?

标签 maven jboss exec-maven-plugin

在我的项目中,我们创建了一个 Maven 模块来获取特定的 JBoss AS 并解压缩。
然后所有的测试用例都可以作为嵌入式容器在这个 Jboss AS 下运行。
我们使用 jboss-ejb3-embedded-standalone 来调用嵌入式容器,但是,它只是从环境变量中找到 JBOSS_HOME 并使用它来运行。
因此,我们必须在每次 mvn 安装时更新 JBOSS_HOME。

我试图通过引入 exec-maven-plugin 在 maven 中做到这一点,如下所示:

    <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <configuration>
        <executable>env</executable>
        <environmentVariables>
            <JBOSS_HOME>
                C:/Sample/embedded-container/jboss-${version.org.jboss.jbossas}
            </JBOSS_HOME>
        </environmentVariables>
    </configuration>
    <executions>
        <execution>
            <id>resetJbossHome</id>
            <phase>integration-test</phase>
            <goals>
                <goal>exec</goal>
            </goals>
        </execution>
    </executions>
</plugin>

在控制台的输出中,我可以看到
[INFO] --- exec-maven-plugin:1.2.1:exec (resetJbossHome) @ test-embedded ---
....
JBOSS_HOME=C:/Sample/embedded-container/jboss-6.1.0.Final

……

但是在启动 JBOSS 时,它仍然在运行设置了 origin JBOSS_HOME 的那个。

此外,我也尝试过使用 maven-antrun-plugin 。
<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <id>copyRelease</id>
            <phase>pre-integration-test</phase>
            <configuration>
                <tasks>
                    <exec executable="env">
       <env key="JBOSS_HOME" value="C:/Sample/embedded-container/jboss-${version.org.jboss.jbossas}"/>
    </exec>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

结果是一样的。

我的配置是错的还是有更好的方法?

最佳答案

看看Maven profiles .

您可以定义一个用于测试的配置文件,一个用于生产的配置文件,具有不同的属性,例如

<profiles>
  <profile>
    <id>test</id>
    <jboss.home>PATH TO JBOSS TEST INSTANCE</jboss.home>
  </profile>
  <profile>
    <id>prod</id>
    <jboss.home>PATH TO JBOSS PROD INSTANCE</jboss.home>
  </profile>
</profiles>

在你的 exec 插件中:
<environmentVariables>
    <JBOSS_HOME>
        ${jboss.home}
    </JBOSS_HOME>
</environmentVariables>

关于maven - 如何在每次运行时在 Maven 中设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9190342/

相关文章:

java - 尝试在 Hibernate 中使用 C3P0

maven - 为 openapi-generator gradle 插件添加自定义代码生成实现

java - 如何自动化 Intellij 项目配置

java - 如何在jboss上传递配置参数

java - 由于 Tycho 'repackaging' ,共享 Maven 插件依赖项的解析方式不同,导致 SecurityException

maven - Maven exec:java在NPE中运行可执行插件依赖项jar结果

maven - 让 Maven Surefire 在控制台中显示堆栈跟踪

jboss - 如何配置消息驱动Bean的池大小

jakarta-ee - 如何在 JBoss AS 7 中配置 2 个持久性提供程序

jakarta-ee - 使用 exec-maven-plugin 运行守护进程避免 `IllegalThreadStateException`