如何在maven jlink插件中配置jlink命令的--output



我正尝试使用maven-jlink-plugin生成JRE,就像使用jlink命令一样。我开始做一个像这样的专家配置:

<plugin>
<artifactId>maven-jlink-plugin</artifactId>
<version>3.1.0</version>
<extensions>true</extensions>
<configuration>
<goal>jlink</goal>
<compress>2</compress>
<noHeaderFiles>true</noHeaderFiles>
<noManPages>true</noManPages>
<output>${project.build.directory}/jre</output>
<addModules>
<addModule>java.compiler</addModule>
<addModule>java.datatransfer</addModule>
<addModule>java.desktop</addModule>
<addModule>java.instrument</addModule>
<addModule>java.logging</addModule>
<addModule>java.management</addModule>
<addModule>java.naming</addModule>
<addModule>java.prefs</addModule>
<addModule>java.rmi</addModule>
<addModule>java.scripting</addModule>
<addModule>java.sql</addModule>
<addModule>java.xml</addModule>
<addModule>jdk.compiler</addModule>
<addModule>jdk.unsupported</addModule>
</addModules>
</configuration>
</plugin>

然而,我在文档中找不到任何元素:https://maven.apache.org/plugins/maven-jlink-plugin/jlink-mojo.html

尽管maven没有抱怨我的<output>,但它并没有产生任何东西。

我的命令行版本如下:

%JAVA_HOME%binjlink --no-header-files --no-man-pages --compress=2 --module-path %JAVA_HOME%jmods --add-modules java.base,java.compiler,java.datatransfer,java.desktop,java.instrument,java.logging,java.management,java.naming,java.prefs,java.rmi,java.scripting,java.sql,java.xml,jdk.compiler,jdk.unsupported --output targetjre

显然,jlink maven插件并不打算这么做。为了运行带有jre输出的命令jlink,maven antrun插件适合这样做:

<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<link compress="2" includeHeaders="false" modulepath="${java.home}/jmods"
includeManPages="false" debug="false" destDir="target/jre">
<module name="java.compiler"/>
<module name="java.datatransfer"/>
<module name="java.desktop"/>
<module name="java.instrument"/>
<module name="java.logging"/>
<module name="java.management"/>
<module name="java.naming"/>
<module name="java.prefs"/>
<module name="java.rmi"/>
<module name="java.scripting"/>
<module name="java.sql"/>
<module name="java.xml"/>
<module name="jdk.compiler"/>
<module name="jdk.unsupported"/>
</link>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.10.12</version>
</dependency>
</dependencies>
</plugin>

对我来说,这很有效:


<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.github.akman</groupId>
<artifactId>jlink-maven-plugin</artifactId>
<version>0.1.8</version>
<configuration>
<modulepath>
<dependencysets>
<!-- add project dependencies to modulepath -->
<dependencyset>
<!-- add project output (module) to modulepath -->
<includeoutput>true</includeoutput>
<!-- exclude automatic modules -->
<excludeautomatic>true</excludeautomatic>
</dependencyset>
</dependencysets>
</modulepath>
<noheaderfiles>true</noheaderfiles>
<nomanpages>true</nomanpages>
<compress>
<compression>ZIP</compression>
</compress>
<stripdebug>true</stripdebug>
<addmodules>
<addmodule>java.base</addmodule>
<addmodule>java.xml</addmodule>
</addmodules>
</configuration>
</plugin>
</plugins>
</pluginManagement>

<plugins>
<plugin>
<groupId>com.github.akman</groupId>
<artifactId>jlink-maven-plugin</artifactId>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>jlink</goal>
</goals>
</execution>
</executions>
</plugin>        
....
...

mvn clean compile package

mvn jlink:jlink

结果在target/jlink文件夹中(对我来说大约是28Mb(。

最新更新