如果我从命令行在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
(例如compilerArgs
的{{1}})吗?
答案 0 :(得分:7)
临时解决方法是在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>
我愿意接受更好的创意。
答案 1 :(得分:1)
使用maven-jar-plugin版本3.1.2+(尚未发布,但issue is closed)是可能的:
<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)[...]。添加的最值得注意的附加属性是模块主类。
基本上,它采用添加到清单文件中的值,并将其添加到模块信息中。
答案 2 :(得分:-4)
也许你可以使用它:
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
然后编辑 MANIFEST.MF 文件
Main-Class: classname
编辑: 我找到了这个配置
<configuration>
<archive>
<manifest>
<mainClass>com.Main</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>