如何使用 Eclipse 将 Maven 项目导出到 exe(或 jar)文件?
Posted
技术标签:
【中文标题】如何使用 Eclipse 将 Maven 项目导出到 exe(或 jar)文件?【英文标题】:How to export Maven project to exe (or jar) file using Eclipse? 【发布时间】:2020-05-01 15:16:41 【问题描述】:我已经完成了一个 Maven 项目,我想将其导出为可运行的 exe(或 jar 文件)。
将其导出到可运行的 .jar 文件后,该文件无法打开。
我做了什么 -> 右键单击项目 -> 刷新 -> 导出 -> 可运行的 Jar 文件 -> 需要打包 ...
.exe 文件也是如此,我使用 launch4j 并导出到 .exe 文件,它也不会运行。
我做了什么 -> 右键单击项目 -> 刷新 -> 导出 -> 可运行的 Jar 文件 -> 需要提取 ... JRE min: 1.11.0(我使用的是 openjdk-11.0.2)
有人对此有什么建议吗?谢谢!
更新:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.flexus</groupId>
<artifactId>FMOTracker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics </artifactId>
<version>11</version>
<classifier>win</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11.0.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.4</version>
<configuration>
<mainClass>com.flexus.FMOTracker.App</mainClass>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<!-- LAUNCH4J -->
<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>console</headerType>
<jar>target/FMOTracker-0.0.1-SNAPSHOT-jar-with-dependencies.jar</jar>
<outfile>target/FMOTracker.exe</outfile>
<downloadUrl>https://java.com/en/download/manual.jsp</downloadUrl>
<classPath>
<mainClass>com.flexus.FMOTracker.App</mainClass>
</classPath>
<jre>
<runtimeBits>64</runtimeBits>
<minVersion>1.11.0</minVersion>
<jdkPreference>preferJre</jdkPreference>
</jre>
<versionInfo>
<fileVersion>1.0.0.0</fileVersion>
<txtFileVersion>$project.version</txtFileVersion>
<fileDescription>$project.name</fileDescription>
<copyright>C</copyright>
<productVersion>1.0.0.0</productVersion>
<txtProductVersion>1.0.0.0</txtProductVersion>
<productName>$project.name</productName>
<internalName>AppName</internalName>
<originalFilename>AppGUI.exe</originalFilename>
</versionInfo>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.flexus.FMOTracker.App</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>assembly</id>
<phase>package</phase>
<goals>
<goal>attached</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- LAUNCH4J ENDE -->
</plugins>
</build>
</project>
我做了什么:
clean compile assembly:single -> 已创建依赖项的 Jar 文件
清理包 -> exe 文件创建
问题:exe文件立即打开和关闭。我该如何解决?这是因为我的源代码错误吗?
更新 pt.2:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/flexus/FMOTracker/App has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
更新 Pt3:
我已将 minJre 更改为 1.11.0
Error: JavaFX runtime components are missing, and are required to run this application
虽然,我已经安装了 openjdk 11.0.2。
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
我的用户库中还有 javafx sdk 11.0.2 外部 jres 文件
我的虚拟机参数
--module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" --add-modules javafx.controls,javafx.fxml```
【问题讨论】:
【参考方案1】:右键单击项目 -> 运行方式 -> Maven 构建 它会询问目标:清洁包装
你会在目标中找到罐子
如果 Maven 构建用于其他目的,请使用 Run 配置并创建具有上述目标的新 Run
(所有这些,理所当然地认为它是一个maven项目,否则,您可能需要先对其进行mavenize,包括launch4j配置以生成exe文件)
【讨论】:
Hey Inquirymind,我试过你的方法,在目标文件夹中找到了我的 exe jar 文件,但它仍然没有运行 当你尝试跑步时它会说什么?大小和eclipse生成的差不多? 它根本没有说或弹出任何东西。大小明显小于Eclipse生成的那个 你可能会和我们分享 pom,所以我们可以尝试猜测发生了什么 你是在命令行上执行吗?请与我们分享输出以上是关于如何使用 Eclipse 将 Maven 项目导出到 exe(或 jar)文件?的主要内容,如果未能解决你的问题,请参考以下文章