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 引数を追加する方法がわかりません。

コマンドラインで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を追加する方法はありますか?

どこかで、dllをアプリケーションルートに配置し、そのハッシュコードを使用してMANIFEST.MFでDLLを指定すると、VMが自動的にそれを取得するようになることを読みました。しかし、それは完全に間違っている可能性があります。

于 2010-12-16T13:20:34.997 に答える
1

あなたの問題の私の解釈は、あなたのアプリケーションがDLLをロードしていて、このDLLがあなたのプロジェクトのresourcesフォルダーにあるということです。正しい?

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から独立しています。問題は2つだけです。

  1. getResource()のパラメーターでファイルのサフィックスを指定するため、ソリューションはシステムに依存しません。
  2. DLLがJAR内にある場合、これは機能しません。この場合、DLLを一時フォルダーに抽出するJARエクストラクターを作成し、一時フォルダー内のファイルを使用してSystem.load()を呼び出します。
于 2010-12-16T13:39:39.317 に答える