MAVENにて実行可能なJarを複数作る話

現在、MQのサンプルプログラムを作成中に、メッセージの送信・受信でそれぞれのjarを作りたいなぁ〜
それぞれのpom.xmlを作るのも変だしなということで調査しました。

( 参考記事 : MAVENにて実行可能なJarを作る話 )

先に答えを書きますと、1回のコマンドで二つの実行可能なjarは作成可能です

maven-shade-pluginプラグインって定義がexecutionsを指定するわけで、つまりは複数形です

なので、それぞれに定義を書いてやれば二つでも作成可能になっています。

ファイル名はconfiguration > finalNameにて指定します。
※ idは違う値を指定してください

今回は別のサンプルソースを使っています。

生成jarIDfinalName実行クラス
ReceiveQueue.jarexecutable-receivequeue-jarReceiveQueueorg.mmpp.example.rabbitmq.ReceiveQueueApplication
PostQueue.jarexecutable-postqueue-jarPostQueueorg.mmpp.example.rabbitmq.PostQueueApplication
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.4</version>
                <executions>
                    <execution>
                        <id>executable-receivequeue-jar</id>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <finalName>ReceiveQueue</finalName>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>org.mmpp.example.rabbitmq.ReceiveQueueApplication</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                    <execution>
                        <id>executable-postqueue-jar</id>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <finalName>PostQueue</finalName>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>org.mmpp.example.rabbitmq.PostQueueApplication</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

パッケージの作成はmvn packageコマンドで作成されます

$ mvn package

別生成ログ

[INFO] --- maven-shade-plugin:3.2.4:shade (executable-receivequeue-jar) @ example.rabbitmq ---
[INFO] Including com.rabbitmq:amqp-client:jar:5.14.0 in the shaded jar.
[INFO] Including org.slf4j:slf4j-api:jar:1.7.32 in the shaded jar.
[INFO] Including org.slf4j:slf4j-simple:jar:1.7.32 in the shaded jar.
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing ~/example.rabbitmq/target/ReceiveQueue.jar with ~/example.rabbitmq/target/example.rabbitmq-1.0-SNAPSHOT-shaded.jar
[INFO] Dependency-reduced POM written at: ~/example.rabbitmq/dependency-reduced-pom.xml
[INFO] 
[INFO] --- maven-shade-plugin:3.2.4:shade (executable-postqueue-jar) @ example.rabbitmq ---
[INFO] Including com.rabbitmq:amqp-client:jar:5.14.0 in the shaded jar.
[INFO] Including org.slf4j:slf4j-api:jar:1.7.32 in the shaded jar.
[INFO] Including org.slf4j:slf4j-simple:jar:1.7.32 in the shaded jar.
[INFO] Replacing ~/example.rabbitmq/target/PostQueue.jar with ~/example.rabbitmq/target/example.rabbitmq-1.0-SNAPSHOT-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

これで、MQを送信する PostQueue.jarと受信する ReceiveQueue.jarが一気に出来上がりました!

参考

maven-shade-plugin : https://maven.apache.org/plugins/maven-shade-plugin/