Mavenを使用してLWJGLプロジェクトをセットアップしようとしています。私はthe official websiteから "始動する"ソースコードの例を使用しています。 、(当然のMavenを使用してプロジェクトを構築した後)MavenにLWJGLインストールのマニフェスト属性が含まれていない
System.out.println("Hello LWJGL " + Version.getVersion() + "!");
これは、Eclipse環境でも問題なく動作します:
は、これは単純なバージョンチェックなどLWJGLのマニフェスト属性を、アクセス数行を含みclean install
を実行して、CMDを通じて**-jar-with-dependencies.jar
を実行しているときには、次の例外がスローさの取得:
java.lang.NullPointerException
at org.lwjgl.system.APIUtil.apiGetManifestValue(APIUtil.java:97)
at org.lwjgl.Version.getVersion(Version.java:33)
at HelloWorld.run(HelloWorld.java:43)
at HelloWorld.main(HelloWorld.java:130)
これはのためでありますAPIUtil
によって作成されたオブジェクトには、という属性は含まれていませんが、Mavenによって作成されたバージョンのみです。
これはなぜですか?私のpom.xmlはバグですか?そうでないとLWJGL 3.0.0ですか?
は、これが私のpom.xml
次のとおりです。
<properties>
<mainClass>HelloWorld</mainClass>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<finalName>${project.artifactId}-${project.version}.jar</finalName>
</properties>
<dependencies>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl-platform</artifactId>
<version>3.0.0</version>
<classifier>natives-windows</classifier>
</dependency>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl-platform</artifactId>
<version>3.0.0</version>
<classifier>natives-linux</classifier>
</dependency>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl-platform</artifactId>
<version>3.0.0</version>
<classifier>natives-osx</classifier>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>${mainClass}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
偉大な答え、非常に明確です。ユーザーがプログラムを実行するのがより困難になるので、私は2番目の選択肢があまり好きではありません。メインジャーにジャーを入れるオプションはありますか?それは働くだろうか?また、LWJGLは特定のクラスが初期化されたときに静的ブロックでこれらのメソッドを呼び出すため、LWJGLはオプションではありません(実際のライブラリハッシュとマニフェストに格納されている値を比較するLibaryコールcheckHash())。 – Frithjof
@Frithjofメインjar内のライブラリjarを含むNoは機能しません。 jarはリソースとして扱われ、クラスに含まれるクラスはクラスパスには含まれません(http://stackoverflow.com/q/183292を参照)。 2番目のオプションでは、最初のオプションと同じくらい簡単です.ZIPを展開し、以前と同じコマンドを実行する必要があります。多くのジャーが懸念されているので(実行するのを混乱させる)、ZIPのルートにシェルスクリプト( 'start.bat' /' start.sh')を追加して、このシェルを実行することができます代わりにスクリプト。 (Mavenディストリビューション自体がバンドルされているのとまったく同じです。) – Tunaki
@Frithjofもう一つの解決策は、メインアーティファクトを 'lib'フォルダー内でなくZIPのルートの外側にすることです。それで 'java -jar finalName.jar'を実行することができ、' lib'の中身について心配する必要はありません。変更が必要です:1.アセンブリ記述子で ' false useProjectArtifact>'( 'true'の代わりに)2.記述子に '/ outputDirectory> 'Jar Pluginの設定で' lib classpathPrefix> 'を追加してください。 –
Tunaki