複数のメインクラスを持つ単一のMavenプロジェクトがあります。これらのプロジェクトから実行可能なJar(すべての依存関係を含む)を生成したい。現在、次のビルド構成を使用しています(maven.Assemblyを使用)。
<build>
<plugins>
<plugin>
<artifactId>maven-Assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>classpath.to.my.mainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
彼らはこれをmaven-assemblyで達成する方法ですか?そうでない場合、私の目標を達成する最も簡単な方法は何ですか?
maven-Assembly-plugin
で満足のいく方法でこの問題を解決することができなかったため、別の解決策を探しました。 onejar-maven-plugin を使用しました:
<build>
<plugins>
<plugin>
<groupId>org.dstovall</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<version>1.4.4</version>
<executions>
<execution>
<id>build-first</id>
<configuration>
<mainClass>classpath.to.first.Main</mainClass>
<attachToBuild>true</attachToBuild>
<classifier>onejar</classifier>
<filename>first-runnable.jar</filename>
</configuration>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
<execution>
<id>build-second</id>
<configuration>
<mainClass>classpath.to.second.Main</mainClass>
<attachToBuild>true</attachToBuild>
<classifier>onejar</classifier>
<filename>second-runnable.jar</filename>
</configuration>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<pluginRepositories>
<pluginRepository>
<id>onejar-maven-plugin.googlecode.com</id>
<url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
</pluginRepository>
</pluginRepositories>
できます。ビルドするアーティファクトごとに個別に実行する必要があります(つまり、それぞれに独自のIDを指定しますが、フェーズはデフォルトのままにしておくことができます)。finalNameとarchive/manifest/mainClassを指定する必要があります- それぞれ。
<build>
<plugins>
<plugin>
<artifactId>maven-Assembly-plugin</artifactId>
<executions>
<execution>
<id>build-a</id>
<configuration>
<archive>
<manifest>
<mainClass>foobar.Aclass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>foobar_a.jar</finalName>
</configuration>
</execution>
<execution>
<id>build-b</id>
<configuration>
<archive>
<manifest>
<mainClass>foobar.Bclass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>foobar_b.jar</finalName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
トップの答え は動作しますifあなたはあなたの環境にバンドルされる設定(またはそのことについてはリソース)を使用していませんjarファイル(たとえば、Spring Frameworkの自動バインディングの構成)。
幸いなことに、このソリューションはmaven-shade-plugin
でも動作し、onejar-maven-plugin
で前述した問題はありません。
また、maven-shade-plugin
は、Googlecodeである煉獄にいるonejar-maven-plugin
とは対照的に、積極的に維持されています。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<id>build-first</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.Apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>classpath.to.first.Main</mainClass>
</transformer>
</transformers>
<finalName>first-runnable</finalName>
</configuration>
</execution>
<execution>
<id>build-second</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.Apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>classpath.to.second.Main</mainClass>
</transformer>
</transformers>
<finalName>second-runnable</finalName>
</configuration>
</execution>
</executions>
</plugin>
私にとって非常に役立つ以前の回答をもう少し指定するには、フェーズパッケージと目標アセンブリを追加し、mvn run cleanパッケージを実行する必要があります。pomは次のとおりです。
<plugin>
<artifactId>maven-Assembly-plugin</artifactId>
<executions>
<execution>
<id>build-a</id>
<configuration>
<archive>
<manifest>
<mainClass>firstMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>a.jar</finalName>
</configuration>
<phase>package</phase>
<goals>
<goal>Assembly</goal>
</goals>
</execution>
<execution>
<id>build-b</id>
<configuration>
<archive>
<manifest>
<mainClass>SecondMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>b.jar</finalName>
</configuration>
<phase>package</phase>
<goals>
<goal>Assembly</goal>
</goals>
</execution>
</executions>
</plugin>