The*_*eLQ 4 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>
Run Code Online (Sandbox Code Playgroud)
(我使用旧版本,所以我可以看到执行参数,但它完全可以重现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
Run Code Online (Sandbox Code Playgroud)
(原始的完整类路径执行已更改为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'.
Run Code Online (Sandbox Code Playgroud)
我试过了
一切都失败了.我真的很茫然.
我想这是在maven中使用JNI的缺点:你必须作为参数传递给测试,运行时,模块运行POM和父POM.
所以我的问题是:如何将java.library.path
属性传递给已执行的文件?如果它与Netbeans运行文件功能集成将是很好的(因此我不必更改POM中的类名,构建,然后运行)
不知道这一点,但显然当你这样做时,你需要先把这个属性.我不认为这是必要的,因为类路径没有立即执行,但显然它确实有所作为.
要修复它,我只需在项目属性>操作>通过Main运行文件中更改它
exec.classpathScope=${classPathScope}
exec.args=-Djava.library.path="native/win32-x86" -classpath %classpath ${packageClassName}
exec.executable=java
Run Code Online (Sandbox Code Playgroud)
您无法在POM中指定它的原因是NB通过类路径以及通过命令行执行的操作exec.args
,它会覆盖POM中的内容.
虽然这可能是丑陋的并且依赖于平台,但是当你混合使用JNI和Maven时会发生什么.我没有其他方式可以看到.
归档时间: |
|
查看次数: |
8805 次 |
最近记录: |