コマンドラインからJava 9でJARを構築する場合、パラメーター--main-class
を渡して、MainClass属性をmodule-info.class
に含めます。
jar --create --file <filename> --main-class=<mainclass> --module-version 0.1 -C classes .
しかし、MavenからJARを構築するとどうなりますか?これが私のmaven-jar-plugin
構成です。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
カスタム引数をmaven-jar-plugin
に渡すことはできますか(maven-compiler-plugin
のcompilerArgs
など)?
これは、maven-jar-pluginバージョン3.1.2+で可能です(まだリリースされていませんが、 問題はクローズされています ):
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.2</version>
<configuration>
<archive>
<manifest>
<mainClass>[main class here]</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
説明によると :
バージョン3.1.2以降、JARファイルにmodule-info.classが含まれている場合、このプラグインは追加の属性でモジュラー記述子(module-info.class)を更新します[...]。追加された最も注目すべき追加属性は、モジュールのメインクラスです。
基本的には、マニフェストファイルに追加された値を取得し、それをmodule-infoにも追加します。
一時的な回避策は、package
フェーズでjar --update
を呼び出すことです。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
...
</configuration>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<exec executable="${Java.home}/bin/jar" failonerror="true">
<arg value="--main-class"/>
<arg value="[main class here]"/>
<arg value="--module-version"/>
<arg value="0.1"/>
<arg value="--update"/>
<arg value="--file"/>
<arg value="${project.build.directory}/${project.artifactId}-${project.version}.jar"/>
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
私はより良いアイデアを求めています。