代码之家  ›  专栏  ›  技术社区  ›  TheLQ

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

  •  4
  • TheLQ  · 技术社区  · 14 年前

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

    所以我把我的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'.
    

    我试过了

    • 直接在environmentvariables标记内使用key和value标记(值得一试)
    • 绑定到一个相位
    • 作为maven arg传递并改用exec:java
    • 将-Djava.library.path=native/win32-x86作为运行参数和项目配置页中的VM选项传递

    一切都失败了。我真的很迷茫。

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

    java.library.path路径

    2 回复  |  直到 14 年前
        1
  •  6
  •   TheLQ    14 年前

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

    若要修复此问题,我只需在“项目属性”>“操作”>“通过主运行文件”中更改此项

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

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

    虽然这可能很难看,而且依赖于平台,但是当您混合JNI和Maven时会发生这种情况。我真的看不到别的路了。

        2
  •  1
  •   oiavorskyi    14 年前

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

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

    推荐文章