Zhe*_*lov 12 java maven java-9
如果我从命令行在Java 9上构建JAR,我将一个参数传递--main-class给包含MainClass属性module-info.class:
jar --create --file <filename> --main-class=<mainclass> --module-version 0.1 -C classes .
Run Code Online (Sandbox Code Playgroud)
但是如果我从maven构建一个JAR呢?这是我的maven-jar-plugin配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我可以通过自定义的参数maven-jar-plugin(如compilerArgs为maven-compiler-plugin)?
临时解决方法是调用jar --update的package阶段:
<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>
Run Code Online (Sandbox Code Playgroud)
我愿意接受更好的想法.
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>
Run Code Online (Sandbox Code Playgroud)
该说明称:
从版本 3.1.2 开始,如果 JAR 文件包含 module-info.class,此插件将使用附加属性 [...] 更新模块化描述符 (module-info.class)。添加的最显着的附加属性是模块主类。
基本上它采用添加到清单文件的值并将其添加到模块信息中。
| 归档时间: |
|
| 查看次数: |
3784 次 |
| 最近记录: |