私は、Netbeans 8.0 と「Java アプリケーション」プロジェクト プロトタイプ用の組み込み Maven プロジェクトでこの問題を抱えています。また、私は Maven 3 を持っていますが、Web 上のいくつかの提案が、Netbeans で使用される Maven コードと一致しないこともわかりました。
とにかく、JAR ファイルを使用してメインクラスを実行し、依存ライブラリを埋め込むための簡単なレシピを次に示します。サブプロジェクト JAR で動作することがわかったプロジェクトの他のプロジェクト POM ファイルを比較して、この作業を行いました。Mavenの知識が豊富な人が gottcha を見つけた場合は、話してください。また、コンテキストを提供するために、いくつかの通常のものを残しました。例は次のとおりです。
<properties>
<packageName>trials.example</packageName>
<mainClass>${packageName}.CmdApp</mainClass>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<slf4jVersion>1.7.7</slf4jVersion>
<log4jVersion>1.2.17</log4jVersion>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
このセクションでは、プロジェクトについて Maven に伝えます。
- packageName ... メインクラスの Java パッケージです
- mainClass ..... main() メソッドを持つクラスの完全修飾名。
これらは maven-jar-plugin で使用されていることがわかります。
組み込みのサンプル プロトタイプが実行しなかったもう 1 つのことは、コマンド ラインから実行できるようにサブプロジェクトを JAR にパッケージ化することでした。これは、以下の maven-dependency-plugin で行われます。興味深いのは、システム関連のものをパッケージ化する必要がなく、依存クラスを JAR にラップする必要があるところです。
これらは次のように使用されます。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<excludeScope>system</excludeScope>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.5</version>
<configuration>
<useDefaultManifestFile>true</useDefaultManifestFile>
<archive>
<manifest>
<mainClass>${mainClass}</mainClass>
<packageName>${packageName}</packageName>
<addClasspath>true</addClasspath>
<classpathPrefix>classes/</classpathPrefix>
</manifest>
<manifestEntries>
<mode>development</mode>
<url>${pom.url}</url>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
それを実現するための数時間のチェックとテストを節約できることを願っています. 乾杯、ウィル。