プロジェクトクラスを含む実行可能なjar(mavenを使用)を作成しようとしています。メインクラスのエントリと、jarのルートにパックされた依存関係を指すクラスパスエントリを持つマニフェストファイルとの依存関係です。 ;このようなもの :
マニフェストファイル:
..... メインクラス:com.acme.MainClass クラスパス:dependecy1.jardependecy2.jar .....
瓶:
jar-root | -.... | -com/acme/../*.class |-dependecy1.jar `--dependecy2.jar
Maven-jar-pluginを使用してマニフェストファイルを作成し、maven-shade-pluginを使用して「uber」jarを作成していますが、依存関係が解凍され、クラスとしてjarに追加されます。
実際、maven 2にはmegajarまたはuberjarを作成するためのすべてが組み込まれているため、maven-shade-plugin
が正確に(または他のプラグインで)何をしているのかを確認しませんでした。事前定義されたjar-with-dependencies
記述子を指定してmaven-Assembly-pluginを使用する必要があります。
このスニペットをpom.xml
に追加するだけで、マニフェストをカスタマイズできます。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-Assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>my.package.to.my.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
そして、次のコマンドはあなたのuberjarを生成します:
mvn Assembly:assembly -DdescriptorId=jar-with-dependencies
ただし、この記述子のデフォルトの動作は、依存関係を解凍することです(maven-shade-pluginなど)。正直なところ、これが問題になる理由はわかりませんが、これが本当に必要なものでない場合は、独自のカスタムアセンブリ記述子を使用できます。
これを行うには、最初に、次の内容でsrc/Assembly/uberjar.xml
などのアセンブリ記述子を作成します。
<Assembly>
<id>uberjar</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<scope>runtime</scope>
<useProjectArtifact>false</useProjectArtifact>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</Assembly>
次に、この記述子を使用し、マニフェストのClass-Path
エントリに依存関係を追加するようにmaven-Assembly-pluginを構成します。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-Assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/Assembly/uberjar.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass>my.package.to.my.MainClass</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
<!--
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
-->
</plugin>
最後にmvn Assembly:assembly
を実行して、uberjarを作成します。
必要に応じて、executions
要素のコメントを解除して、package
フェーズでアセンブリプラグインをバインドします(通常のビルドの一部としてアセンブリを生成します)。
OneJar には maven2プラグイン があります。
私は過去にこれにFatJarを使用しました。 http://fjep.sourceforge.net/
私は比較的単純なアプリケーションを作成しました。クライアントは実行可能ファイルをダブルクリックして、それを機能させたいと考えていました。インストーラーや依存関係は問題外です。 Fatjarは、プロジェクトライブラリと参照ファイルをEclipseから数メガバイトの実行可能jarにバンドルしました。完璧。
私はこれを行う2つの製品を知っています:
MavenアセンブリでOneJarを使用している人からの投稿は次のとおりです。