0

WindowsでJOGLを使用してアプリを開発しています。これまで Eclipse を使用してきましたが、対応する Maven POM ファイルの作成を開始したので、ビルドとパッケージ化の手順を自動化できます。

JOGL は Maven で積極的に維持されていないため、install:install-file を介してローカル リポジトリに jar をインポートする小さなスクリプトを作成しました。

set JOGL_VER=2.0
set JOGL_HOME=./jogl
set JOGL_LIB=%JOGL_HOME%/jar
set MVN_INSTALL=call mvn install:install-file

%MVN_INSTALL% -DgroupId=org.jogamp.gluegen -Dfile=%JOGL_LIB%/gluegen-rt-natives-windows-i586.jar \
   -DartifactId=gluegen-rt-natives-windows-i586 -Dversion=%JOGL_VER% -Dpackaging=jar
%MVN_INSTALL% -DgroupId=org.jogamp.gluegen -Dfile=%JOGL_LIB%/gluegen.jar \
   -DartifactId=gluegen -Dversion=%JOGL_VER% -Dpackaging=jar

%MVN_INSTALL% -DgroupId=org.jogamp.jogl -Dfile=%JOGL_LIB%/jogl-all-natives-windows-i586.jar \
   -DartifactId=jogl-all-natives-windows-i586 -Dversion=%JOGL_VER% -Dpackaging=jar
%MVN_INSTALL% -DgroupId=org.jogamp.jogl -Dfile=%JOGL_LIB%/jogl-all.jar 
   -DartifactId=jogl-all -Dversion=%JOGL_VER% -Dpackaging=jar

これにより、私のレポに次のファイルが作成されます

.m2\repository\org\jogamp\gluegen\gluegen\2.0\gluegen-2.0.jar
.m2\repository\org\jogamp\gluegen\gluegen\2.0\gluegen-2.0.pom
.m2\repository\org\jogamp\gluegen\gluegen-rt-natives-windows-i586\2.0\gluegen-rt-natives-windows-i586-2.0.jar
.m2\repository\org\jogamp\gluegen\gluegen-rt-natives-windows-i586\2.0\gluegen-rt-natives-windows-i586-2.0.pom
.m2\repository\org\jogamp\jogl\jogl-all\2.0\jogl-all-2.0.jar
.m2\repository\org\jogamp\jogl\jogl-all\2.0\jogl-all-2.0.pom
.m2\repository\org\jogamp\jogl\jogl-all-natives-windows-i586\2.0\jogl-all-natives-windows-i586-2.0.jar
.m2\repository\org\jogamp\jogl\jogl-all-natives-windows-i586\2.0\jogl-all-natives-windows-i586-2.0.pom

ここでは 2.0 を指定したため、ファイルの末尾には 2.0 が付きます (例: gluegen-rt-natives-windows-i586-2.0.jar)。

しかし今、私は exec:java コマンドを使用してビルド後にアプリを実行し、アプリが確実に機能するようにしたいと考えています。

mvn exec:java

だから私は私の pom.xml に exec-maven-plugin を追加します

  <build>
    <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.2.1</version>
      <configuration>
        <mainClass>com.testapp.App</mainClass>
      </configuration>
    </plugin>
    </plugins>
   </build>

また、依存関係を JOGL に追加します。コンパイル時にネイティブ バイナリは必要ないため、ネイティブ バイナリは実行時にスコープが設定されているわけではありません。

<dependency>
       <groupId>org.jogamp.gluegen</groupId>
       <artifactId>gluegen</artifactId>
       <version>2.0</version>
</dependency>
<dependency>
       <groupId>org.jogamp.jogl</groupId>
       <artifactId>jogl-all</artifactId>
       <version>2.0</version>
</dependency>
<dependency>
        <groupId>org.jogamp.gluegen</groupId>
        <artifactId>gluegen-rt-natives-windows-i586</artifactId>
        <version>2.0</version>
        <scope>runtime</scope>
</dependency>
<dependency>
        <groupId>org.jogamp.jogl</groupId>
        <artifactId>jogl-all-natives-windows-i586</artifactId>
        <version>2.0</version>
        <scope>runtime</scope>
</dependency>

しかし、これを実行すると、次のエラーが発生します

Catched FileNotFoundException: C:\Users\xxx\.m2\repository\org\jogamp\gluegen\gluegen\2.0\gluegen-2.0-natives-windows-i586.jar (
The system cannot find the file specified), while TempJarCache.bootstrapNativeLib() of jar:file:/C:/Users/xxx/.m2/repository/org
/jogamp/gluegen/gluegen/2.0/gluegen-2.0-natives-windows-i586.jar!/ (file:/C:/Users/xxx/.m2/repository/org/jogamp/gluegen/gluegen
/2.0/ + gluegen-2.0-natives-windows-i586.jar)
[WARNING]

したがって、問題は簡単です。install:install-file を介して jar をインストールし、アーティファクト ID の後にバージョン 2.0 が追加されました (例、gluegen-rt-natives-windows- i586-2.0 .jar )。natives-windows-i586.jar.

プロジェクトがビルドされるので、コンパイル フェーズでは予想されるファイル名を使用して jar ファイルを正しく検索していると想定する必要がありますが、exec はそうではありません。

アーティファクト ID の途中でバージョン番号がダンプされるのはなぜですか? また、正しく機能させるにはどうすればよいですか? アーティファクト ID は慣例に従って名前が付けられているため、なぜこのように分割されるのかわかりません。

4

1 に答える 1

3

Exec:java はあなたの問題とは何の関係もありません。

JOGL 自体には、JNI を介してネイティブ コードを管理するためのある種の複雑な内部メカニズムがあり、そのメカニズムは、リポジトリ内のファイルに名前を付けるための Maven 規則と互換性のないファイル名について仮定します。

maven-assembly-plugin を使用して依存関係を JOGL に必要な名前と形状を持つツリーにコピーし、そこから実行するか、JOGL を再構成して Maven 命名規則を許容する方法を見つける必要があります。

于 2013-01-09T12:23:42.683 に答える