一个Java的maven项目生成.exe文件的详细过程
前言:本文是对一个java的maven项目开发桌面程序,从源码——打包jar——生成可执行文件(即后缀为.exe文件)的全过程进行了详细介绍,网上介绍的大多是其中某一个部分,小白学习起来很费劲的。你读了这篇文章后,只要按步骤操作配置,就可以将maven项目的桌面程序编译为可执行文件,拿出去给白白装叉了:)
一、工具准备
-
JDK22,安装JDK配置好开发环境。当然,版本自选。
[!NOTE]
但环境遍历一定要配置好,java的命令运行有效。
-
Eclipe开发工具(接触Java开发都懂的工具),主流javaIDE之一。
-
exe4j可以将 java 项目(jar)打包成exe可执行文件,官网下载:ej-technologies - Download exe4j,32位或64位版本要选对哦。
二、准备一个maven项目
我这里准备的是一个很简单的maven项目做出来的桌面程序,如果你不懂什么是maven项目,那就查查资料吧,毕竟我这里介绍的东西起码你不能比我还白:)。
程序非常简单,从目标文件demo.xml中读取一句话,并在窗口中输出。具体过程如下:
1.第一次配置pom.xml文件
这个项目要用到SAXreader对象,导入dom4j包。给个参数配置网址:Maven Repository: dom4j » dom4j » 1.6.1 (mvnrepository.com)
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.leo</groupId>
<artifactId>DemoMaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--配置(1)-->
<dependencies>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
<!--这里准备放置生成maven依赖jar包的配置(2)-->
</project>
2.准备目标文件demo.xml
目标文件可以自定义放置位置,我这里直接放到项目根目录了。
<?xml version="1.0" encoding="UTF-8"?>
<list>
<info>这是一个maven程序生成可执行文件的演示!</info>
</list>
3.Java代码如下:
package myDemo;
import java.awt.Container;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Exe4jDemo extends JFrame {
private static final long serialVersionUID = 1L;
private JLabel infoLab;
public Exe4jDemo() {
init();
}
//初始化窗口
public void init() {
setTitle("Demo");
setSize(300,200);
setLayout(null);
setLocationRelativeTo(null);
Container content=getContentPane();
infoLab=new JLabel();
infoLab.setBounds(10,60,260,25);
content.add(infoLab);
ImageIcon icon=new ImageIcon(Exe4jDemo.class.getClassLoader().getResource("bg.png"));
JLabel bgImg=new JLabel(icon);
bgImg.setBounds(0,0,300,200);
content.add(bgImg);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//窗口中显示一条信息
public void showInfo() throws Exception {
FileInputStream fis=new FileInputStream("demo.xml");
InputStreamReader isr=new InputStreamReader(fis,"utf-8");
SAXReader reader=new SAXReader();
Document doc=reader.read(isr);
Element ele=doc.getRootElement();
infoLab.setText(ele.elementTextTrim("info"));
}
public static void main(String[] args) throws Exception {
Exe4jDemo demo=new Exe4jDemo();
demo.showInfo();
}
}
三、生成带有maven依赖的jar包
这里我查了好多资料,好多文章说的都不完整,可能大咖角度的确没考虑小白的感受:(
1.第二次配置pom.xml文件
下面的配置是放到标签内的。maven-assembly-plugin 插件是一个强大的工具,用于将 Maven 项目打包成可执行的程序或分发包。它可以将项目中的代码、资源和所有依赖包的内容打成一个程序集,支持多种格式如 zip、tar.gz、jar 和 war 等。
<!--配置(2)-->
<build>
<plugins>
<plugin>
<!-- mavenAssembly插件,这里groupId和version标签省略了,默认最新版本-->
<artifactId> maven-assembly-plugin </artifactId>
<!-- configuration是对你要打的jar包进行相关配置 -->
<configuration>
<descriptorRefs>
<!-- 所有的依赖全部打入jar包-->
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<!-- 程序运行时,主入口类,即你的main函数所在的类-->
<mainClass>myDemo.Exe4jDemo</mainClass>
</manifest>
</archive>
</configuration>
<!--executions定义了插件的执行阶段和目标-->
<executions>
<!-- 单个执行配置-->
<execution>
<id>make-assembly</id>
<!-- 插件执行的声明周期,打包阶段-->
<phase>package</phase>
<!-- 插件的执行目标,单个分发-->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
2.生成jar包
(1)在DemoMaven项目上——>点右键——>选”Run As"——>点击"Maven install",运行生成jar包。
(2)看控制台运行结果:BUILD SUCCESS打包成功,并在target文件夹下出现一堆文件夹和文件,其中带有"jar-with-dependencies"名字的DemoMaven-0.0.1-SNAPSHOT-jar-with-dependencies.jar,就是我们需要的jar包。
(3)测试jar包能否运行
为了测试,在D盘新建文件夹jardemo方便测试。到项目的target文件夹下,将"DemoMaven-0.0.1-SNAPSHOT-jar-with-dependencies.jar"拷贝到jardemo文件夹,修改名字"DemoMaven.jar";程序用到的demo.xml文件也要拷贝过来,与jar包放到同一个文件夹下。
[!CAUTION]
在项目/DemoMaven/src/main/resources包下的资源可以一同打包,除此之外的资源需要手动拷贝;如果资源是在文件夹下,还需要同时拷贝文件夹。
打开“命令提示符”窗口调试,运行正常,至此,打包完成。
四、生成exe文件
要生成exe文件需要用到工具exe4j,这个工具关键在配置,配置好了就可以顺利生成,没啥技术含量,但“会者不难、难者不会”。配置步骤如下:
1.安装完exe4j应用程序,首次打开exe4j,进入“Welcome”页面
给个密钥:A-XVK258563F-1p4lv7mg7sav,这个可以用。
点“确定”,注册通过。
2.下一步,进入“Project type”页面。
3.下一步,进入“Application info”页面。
4.下一步,进入“Executable info”页面。
5.下一步,进入“Java invocation”页面。
点中“+”号,选择要生成exe文件的jar包,即第三步骤打包的DemoMaven.jar文件。
“确定”后,点下面的“…”,弹出程序入口类选择界面,选中你的入口函数所在的类。
“确定”后,配置页面情况。
6.下一步,进入“JRE”页面,配置成在其他没有Java环境的计算机上照常运行的程序。
点击“高级选项”的“Search sequence”,创建jre文件路径。
"确定"后,会生成一个Directory./jre的路径图标,移到最上面即可。
[!CAUTION]
实际上,如果你生成程序你自己电脑用,不需要给别人使用,是可以略过这里的“高级选项”配置的。
7.连续点击“下一步”,进入“Finished”页面。
可以看到上面,测试已成功!实际上,在进入“Compile executable”页面时,已编译生成exe文件,可以查看exe文件设置的输出路径,在jardemo文件夹下:
8.完成JRE文件拷贝,实现任何地方都可以运行exe文件。
上一步完成后,只能在你自己的电脑上运行,因为你的机子上有JRE环境(JDK中是包含JRE的),即便jardemo文件夹下还没有前面指定的jre文件夹及文件,exe程序也会通过环境变量找到你的JRE(也就是你的JDK)。所以,换了别人电脑,不一定会装JRE,运行这个程序就可能会报错。要使该程序实现任何地方都可以运行,在第6步“高级选项”配置基础上,还需要将JDK中的jre文件夹复制到jardemo目录下,具体过程如下:
-
找到你的JDK安装目录。如果你忘记了JDK安装目录,可以在控制台,使用“where java"命令查看。
-
到D:\Program Files\Java\jdk-22文件夹下查找jre文件夹。因为我的JDK版本比较高,没有发现jre文件夹,这需要在控制台生成一个。在控制台进入jdk-22目录,命令:bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre。
发现jdk-22文件夹下出现了jre文件夹,这就是java程序运行时,所需要的jre环境文件。
-
将jre文件夹整体拷贝至jardemo文件夹下,删除不需要的jar包。最后将jardemo下所有的文件一起压缩传给需要的人使用即可!