9

我想指定 -Djava.library.path=./src/main/resources 的 vm args 以便自动拾取一个 dll,并且我想在 maven 中指定这个,因此其他开发人员不必手动配置 eclipse .

我在想maven eclipse插件可能会有所帮助,所以我可以做类似的事情

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-eclipse-plugin</artifactId>
  <version>2.7</version>
  <configuration>
    DO MAGIC HERE ???? <<-----
  </configuration>
</plugin>

但我看不到从插件中添加 VM args 的方法。

我已经修复了这个问题,以便在命令行通过 maven 运行我的测试

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.4.3</version>
  <configuration>
    <argLine>-Xmx768m -Xms128m -Djava.library.path=${basedir}/src/main/resources/</argLine>
  </configuration>
</plugin>

我目前的解决方案是,我将不得不告诉开发人员手动将其添加到 eclipse 中,这似乎不太好。

有没有人对如何解决这个问题有任何想法。

干杯,

大卫。

4

2 回答 2

1

也许这应该是一个更普遍的问题:

有什么方法可以将 DLL 添加到 VM 而无需通过库路径指定它?

我在某处读过将 dll 放在应用程序根目录中并在 MANIFEST.MF 中使用其哈希码指定 DLL 会触发 VM 自动获取它。但这可能是完全错误的。

于 2010-12-16T13:20:34.997 回答
1

我对您的问题的解释是您的应用程序正在加载一个 DLL,并且该 DLL 位于您项目的资源文件夹中。正确的?

如果 DLL 位于类路径中的文件夹中,则可以获取 DLL 的完整路径并使用以下方法加载它:

// assuming dll is located in the default package
URI dllUri = this.getClass().getResource("/mydll.dll").toURI();
File dllFile = new File(dllUri);
System.load(dllFile.getCanonicalPath());

这是独立于maven的。只有两个问题:

  1. 该解决方案与系统无关,因为您在 getResource() 的参数中指定了文件的后缀
  2. 如果 DLL 在 JAR 中,这将不起作用。对于这种情况,我们构建了一个 JAR 提取器,它将 DLL 提取到一个临时文件夹并使用临时文件夹中的文件调用 System.load()。
于 2010-12-16T13:39:39.317 回答