5

我一直在用头撞墙大约一个小时:我正在尝试将一个简单的属性 ( 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'.

我试过了

  • 在环境变量标签内使用单独的键和值标签
  • 直接在 enviornmentVariables 标签内使用键和值标签(值得一试)
  • 绑定到一个阶段
  • 作为 maven arg 传递并使用 exec:java 代替
  • 在项目配置页面中将 -Djava.library.path=native/win32-x86 作为运行参数和 VM 选项传递

一切都失败了。我在这里真的很茫然。

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

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

4

2 回答 2

6

不知道这一点,但显然在执行此操作时,您需要先放置此属性。我认为没有必要,因为类路径不会立即执行,但显然它确实有所作为。

为了修复它,我只是在 Project Properties > Actions > Run File via 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 时会发生这种情况。我真的没有其他方式可以看到。

于 2010-10-20T14:59:10.557 回答
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>

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

于 2010-10-17T08:30:33.333 回答