私は何が悪かったのか理解しました。これは、外部JARのソース(ext.jar
今後)をNetbeansプロジェクトの形式で取得して、デバッグできるようにした後で初めて明らかになりました。
ext.jar
特定の条件に応じて、いくつかのDLLの1つをロードする場合があります。を使用して適切なDLLへのファイルパスを作成し、その値を使用してSomeClass.class.getProtectionDomain().getCodeSource().getLocation().getFile()
呼び出しSystem.load(path)
ます。このパスは、Netbeansの2つのバージョン間で異なります。ext.jar
は実際には別のJAR(Netbeansプロジェクトでもあります)によって使用されており、そのJARはアプリケーション(プロジェクトでもあります)のメインの実行可能JARによって使用されます。
Main JAR (Netbeans project)
˪ Common JAR (Netbeans project)
˪ External JAR with JNI (ext.jar)
プロジェクト設定のすべての外部ライブラリは、すべてのプロジェクトが存在するのと同じレベルのディレクトリ内に配置されます。これにより、複数のプロジェクトで共通のライブラリセットを使用できるようになります。プロジェクトは、相対パスを使用してライブラリを参照します。
CommonLibraries
MainJARProjdir
CommonJARProjdir
RandomProjdir1
…
RandomProjdirN
ビルドするときMain
は、Common
その前にビルドする必要があります(Common
のプロジェクト依存ですMain
)。Common
(デフォルトで)ビルドの過程で、すべての依存関係JARがにコピーされ${common.proj.dir}/dist/lib
ます。もちろん、コピープロセスは、DLLをと一緒にコピーする必要があるという事実を認識していませんext.jar
。
ただし、問題の根本は、6.9.1と7+での依存関係の処理の違いです。との両方への依存関係を指定した場合(コードを直接使用していなくても、これが実行されました)6.9.1は、デバッグ時に使用します。これには、必要なすべてのDLLが常に横にあります。 +は常にを使用しますが、DLLがありません。ext.jar
Main
Common
Main
../CommonLibraries/ext.jar
${common.proj.dir}/dist/lib/ext.jar
問題が何であるかを認識した後、解決策は簡単になります。-post-clean
のターゲットを追加しました。これbuild.xml
は、クリーンアップするたびに必要なDLLをからにCommon
コピーするだけです。機能した。完全を期すために、これはどちらの方法でも実行する必要があります。../CommonLibraries/
${common.proj.dir}/dist/lib/
2つのバージョンのIDEで依存関係の処理が異なる理由は、「依存関係ライブラリのコピー」Project Properties/Build/Packaging
と呼ばれる新しいチェックボックスにあるようです。それをチェックすることもできます。このチェックボックスはデフォルトで有効になっていることに注意してください(ライブラリプロジェクトの場合でも)。Common