首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将环境变量传递给在Maven中执行的进程

将环境变量传递给在Maven中执行的进程
EN

Stack Overflow用户
提问于 2010-10-17 02:52:54
回答 2查看 9.9K关注 0票数 5

我的头撞在墙上已经有一个小时了:我正试图通过一个简单的属性(java.library.path)来执行maven插件。目标是让它与Netbeans的右键单击文件>运行文件过程集成。

所以我把我的POM设置成这样:

代码语言:javascript
运行
复制
<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>

(我使用了一个旧版本,这样我就可以看到执行args,但它完全可以在1.2中复制)

然后右键单击我的文件并单击"Run“。Netbeans启动此过程:

代码语言:javascript
运行
复制
 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,因此希望我的配置得到应用)

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

代码语言:javascript
运行
复制
 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'.

我试过了

在phase

  • passing标记

  • 中使用单独的键标记和值标记,将键和值标记直接作为maven arg绑定到instead

  • Passing中的enviornmentVariables标记(值尝试)

  • ,并在项目配置页

中使用exec:java -Djava.labary.path=instead

  • Passing/ Run 32-x86作为运行参数和VM选项

都失败了。我真的很茫然。

我猜这是在maven中使用JNI的缺点:您必须将其作为参数传递给您的测试、运行时、模块运行POM和您的父POM。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-20 14:59:10

我不知道,但很明显,当你这么做的时候,你需要把这个财产放在第一位。我不认为这是必要的,因为类路径并没有立即执行,但显然它确实产生了影响。

要修复它,我只需在Properties > Actions >中更改它。

代码语言:javascript
运行
复制
exec.classpathScope=${classPathScope}
exec.args=-Djava.library.path="native/win32-x86" -classpath %classpath ${packageClassName}
exec.executable=java

您不能在POM中指定它的原因是,NB通过命令行exec.args传递类路径及其执行内容,这将覆盖POM中的内容。

虽然这可能是丑陋的和平台依赖的,但当您混合JNI和Maven时会发生这种情况。我看不出有什么别的办法。

票数 6
EN

Stack Overflow用户

发布于 2010-10-17 08:30:33

不确定您是否尝试过这样做,但是只要您需要在JVM级别上设置属性,就应该使用-Djava.library.path=/some/path完成。

因此,为了将其指定为exec-maven-plugin,您可以编写如下所示:

代码语言:javascript
运行
复制
<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>

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3951818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档