传递环境变量以在Maven中执行进程

时间:2010-10-17 02:52:55

标签: java maven-2 netbeans exec-maven-plugin

我一直在墙上撞了大约一个小时:我正试图将一个简单的属性(java.library.path)传递给exec-maven-plugin。目标是将其与Netbeans右键单击文件集成>运行文件过程。

所以我设置了这样的POM:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.1.1</version>
            <configuration>
                <environmentVariables>
                    <java.library.path>native/win32-x86</java.library.path>
                </environmentVariables>
            </configuration>
        </plugin>
    </plugins>
</build>

(我使用旧版本,所以我可以看到执行参数,但它完全可以与1.2重现)

然后我右键单击我的文件并单击“运行文件”。 Netbeans开始这个过程:

 W:\programming\apache-maven-2.2.1\bin\mvn.bat -Dexec.classpathScope=runtime -Dexec.args=-classpath %classpath org.quackedcube.camera.CameraDemo -Dexec.executable=C:\Program Files\Java\jdk1.6.0_21\bin\java.exe -Dnetbeans.execution=true -Dmaven.repo.local=W:\programming\maven-repo process-classes exec:exec

(原始的完整类路径执行已更改为exec:exec,因此希望我的配置已应用)

但是我的环境变量显然被忽略了,因为生成的执行程序是:

 Result of cmd.exe /X /C ""C:\Program Files\Java\jdk1.6.0_21\bin\java.exe" -classpath *snip* org.quackedcube.camera.CameraDemo" execution is: '1'.

我试过

  • 在enviornmentVariable标记内使用单独的Key和Value标记
  • 直接在enviornmentVariables标记内使用键和值标记(值得一试)
  • 绑定到阶段
  • 作为maven arg传递并使用exec:java而不是
  • 在项目配置页面中将-Djava.library.path = native / win32-x86作为Run参数和VM选项传递

所有人都失败了。我真的很茫然。

我想这是在maven中使用JNI的缺点:你必须作为参数传递给你的测试,你的运行时,你的模块运行POM,以及你的父POM。

所以我的问题:如何将java.library.path属性传递给已执行的文件?如果它与Netbeans运行文件功能集成将是很好的(因此我不必更改POM中的类名,构建,然后运行)

2 个答案:

答案 0 :(得分:6)

不知道这一点,但显然当你这样做时,你需要先把这个属性。我不认为这是必要的,因为类路径没有立即执行,但显然它确实有所作为。

要修复它,我只是在Project Properties&gt;中更改了它。行动&gt;通过Main运行文件

exec.classpathScope=${classPathScope}
exec.args=-Djava.library.path="native/win32-x86" -classpath %classpath ${packageClassName}
exec.executable=java

你无法在POM中指定它的原因是NB通过命令行exec.args传递类路径和它的执行,它会覆盖你POM中的什么。

虽然这可能是丑陋的并且依赖于平台,但是当你混合使用JNI和Maven时会发生什么。我没有其他方式可以看到。

答案 1 :(得分:1)

不确定您是否尝试过此操作,但只要您需要在JVM级别设置属性,就应该使用-Djava.library.path=/some/path

因此,为了为exec-maven-plugin指定它,您可以编写如下内容:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.1</version>
    <configuration>
        <executable>java</executable>
        <arguments>
            <argument>-Djava.library.path=${java.library.path}</argument>
    </arguments>
    </configuration>
</plugin>

当然,您需要更新可执行文件,并可能添加其他属性。