如何使用 Launch4j 和 Maven 创建 .exe 文件

How to create an .exe file with Launch4j and Maven

我正在尝试创建项目的 .exe 版本,但总是出现错误。我对 Maven 的经验很少,而且我从未尝试过。我已经创建了 .jar 文件并且 100% 有效。

这是我的 pom.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.project1616</groupId>
    <artifactId>Project16x16</artifactId>
    <version>1.0.0</version>

    <name>Project16x16</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <repositories>
        <repository>
            <id>repo</id>
            <releases>
                <enabled>true</enabled>
                <checksumPolicy>ignore</checksumPolicy>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <url>file://${project.basedir}/repo</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>local</groupId>
            <artifactId>core</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>local</groupId>
            <artifactId>DM</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>local</groupId>
            <artifactId>gicentreUtils</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>local</groupId>
            <artifactId>javafx-swt</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>local</groupId>
            <artifactId>javafx.base</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>local</groupId>
            <artifactId>javafx.controls</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>local</groupId>
            <artifactId>javafx.fxml</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>local</groupId>
            <artifactId>javafx.graphics</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>local</groupId>
            <artifactId>javafx.media</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>local</groupId>
            <artifactId>javafx.swing</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>local</groupId>
            <artifactId>javafx.web</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx</artifactId>
            <version>13</version>
            <type>pom</type>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                    <executions>
                        <execution>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                    <executions>
                        <execution>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                    <executions>
                        <execution>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                    <executions>
                        <execution>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.0.2</version>
                    <executions>
                        <execution>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                    <executions>
                        <execution>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                    <executions>
                        <execution>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>org.project16x16.sidescroller.SideScroller</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.7.1</version>
                    <executions>
                        <execution>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-project-info-reports-plugin</artifactId>
                    <version>3.0.0</version>
                    <executions>
                        <execution>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>com.akathist.maven.plugins.launch4j</groupId>
                    <artifactId>launch4j-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>l4j-clui</id>
                            <phase>package</phase>
                            <goals>
                                <goal>launch4j</goal>
                            </goals>
                            <configuration>
                                <headerType>gui</headerType>
                                <jar>target/Project16x16-1.0.0.jar.jar</jar>
                                <outfile>target/Project16x16.exe</outfile>
                                <downloadUrl>http://java.com/download</downloadUrl>
                                <classPath>
                                    <mainClass>org.project16x16.sidescroller.SideScroller</mainClass>
                                    <preCp>anything</preCp>
                                </classPath>
                                <jre>
                                    <bundledJre64Bit>false</bundledJre64Bit>
                                    <bundledJreAsFallback>false</bundledJreAsFallback>
                                    <minVersion>1.8.0</minVersion>
                                    <jdkPreference>preferJre</jdkPreference>
                                    <runtimeBits>32</runtimeBits>
                                </jre>
                                <versionInfo>
                                    <fileVersion>1.0.0.0</fileVersion>
                                    <txtFileVersion>${project.version}</txtFileVersion>
                                    <fileDescription>${project.name}</fileDescription>
                                    <copyright>2017 spiraluplabs.com</copyright>
                                    <productVersion>1.0.0.0</productVersion>
                                    <txtProductVersion>1.0.0.0</txtProductVersion>
                                    <productName>${project.name}</productName>
                                    <companyName>SpiralUp</companyName>
                                    <internalName>SpiralShareAutoAllocation</internalName>
                                    <originalFilename>SpiralShareAutoAllocation.exe</originalFilename>
                                </versionInfo>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>


这是我遇到的错误:

[INFO] Building Project16x16 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[WARNING] The POM for org.processing:core:jar:3.3.6 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[INFO]
[INFO] --- launch4j-maven-plugin:1.7.25:launch4j (default-cli) @ Project16x16 ---
[INFO] Platform-specific work directory already exists: C:\Users\aless\.m2\repository\net\sf\launch4j\launch4j.12\launch4j-3.12-workdir-win32

net.sf.launch4j.BuilderException: Enter: Header type 
    at net.sf.launch4j.Builder.build (Builder.java:76)
    at com.akathist.maven.plugins.launch4j.Launch4jMojo.doExecute (Launch4jMojo.java:432)
    at com.akathist.maven.plugins.launch4j.Launch4jMojo.execute (Launch4jMojo.java:321)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.706 s
[INFO] Finished at: 2019-10-07T16:58:38+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.akathist.maven.plugins.launch4j:launch4j-maven-plugin:1.7.25:launch4j (default-cli) on project Project16x16: Failed to build the executable; please ver
ify your configuration.: Enter: Header type -> [Help 1]

我使用的命令如下: mvn com.akathist.maven.plugins.launch4j:launch4j-maven-plugin:launch4j

我已经搜索了我遇到的错误,但我找不到解决方法。 感谢您的帮助!

谢谢

编辑

如果我 运行 mvn clean package 我得到以下日志:

[INFO] --------------------< org.project1616:Project16x16 >--------------------
[INFO] Building Project16x16 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ Project16x16 ---
[INFO] Deleting C:\Users\aless\Documents\Università\Secondo anno\Programmazione orientata agli oggetti\Project16x16\source\target
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ Project16x16 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 57 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ Project16x16 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 49 source files to C:\Users\aless\Documents\Università\Secondo anno\Programmazione orientata agli oggetti\Project16x16\source\target\classes
[WARNING] /C:/Users/aless/Documents/Università/Secondo anno/Programmazione orientata agli oggetti/Project16x16/source/src/main/java/org/project16x16/sidescroller/SideScroller.java: Some
input files use or override a deprecated API.
[WARNING] /C:/Users/aless/Documents/Università/Secondo anno/Programmazione orientata agli oggetti/Project16x16/source/src/main/java/org/project16x16/sidescroller/SideScroller.java: Recom
pile with -Xlint:deprecation for details.
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ Project16x16 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\aless\Documents\Università\Secondo anno\Programmazione orientata agli oggetti\Project16x16\source\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ Project16x16 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\Users\aless\Documents\Università\Secondo anno\Programmazione orientata agli oggetti\Project16x16\source\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ Project16x16 ---
[INFO]
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ Project16x16 ---
[INFO] Building jar: C:\Users\aless\Documents\Università\Secondo anno\Programmazione orientata agli oggetti\Project16x16\source\target\Project16x16-1.0.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  10.716 s
[INFO] Finished at: 2019-10-08T10:34:39+02:00
[INFO] ------------------------------------------------------------------------

连launch4j插件都没用过!我也更新了pom.xml

我修改了 JRE 细节的 launch4j 插件部分。使用命令 mvn clean package.

在下面找到代码和 运行
<plugin>
          <groupId>com.akathist.maven.plugins.launch4j</groupId>
          <artifactId>launch4j-maven-plugin</artifactId>
          <executions>
            <execution>
              <id>l4j-clui</id>
              <phase>package</phase>
              <goals>
                <goal>launch4j</goal>
              </goals>
              <configuration>
                <headerType>gui</headerType>
                <jar>target/Project16x16-1.0.0.jar.jar</jar>
                <outfile>target/Project16x16.exe</outfile>
                <downloadUrl>http://java.com/download</downloadUrl>
                <classPath>
                  <mainClass>org.project16x16.sidescroller.SideScroller</mainClass>
                  <preCp>anything</preCp>
                </classPath>
                <jre>
                    <bundledJre64Bit>false</bundledJre64Bit>
                    <bundledJreAsFallback>false</bundledJreAsFallback>
                    <minVersion>1.8.0</minVersion>
                    <jdkPreference>preferJre</jdkPreference>
                    <runtimeBits>32</runtimeBits>
                </jre>
                <versionInfo>
                  <fileVersion>1.0.0.0</fileVersion>
                  <txtFileVersion>${project.version}</txtFileVersion>
                  <fileDescription>${project.name}</fileDescription>
                  <copyright>2017 spiraluplabs.com</copyright>
                  <productVersion>1.0.0.0</productVersion>
                  <txtProductVersion>1.0.0.0</txtProductVersion>
                  <productName>${project.name}</productName>
                  <companyName>SpiralUp</companyName>
                  <internalName>SpiralShareAutoAllocation</internalName>
                  <originalFilename>SpiralShareAutoAllocation.exe</originalFilename>
                </versionInfo>
              </configuration>
            </execution>
          </executions>
        </plugin>