利用IDEA和exe4j生成exe文件及资源文件和so、dll文件的放置

来源:互联网 发布:怎样收藏淘宝店铺 编辑:程序博客网 时间:2024/05/17 01:09

在网上搜索大部分文章,发现并不能完全解决自己的问题时,遂自己摸索,然后总结写下此文。

在贴出具体步骤前,我们需要先换位思考下,假如我们是设计者我们该如何让一个java项目展现在用户面前呢

1.首先得有个java环境吧,才能在jvm上跑你的虚拟机(jre文件夹)

2.跑你的项目,jvm首先得知道你写了啥代码吧(jar包),并且知道这个项目的入口在哪(main函数)

3.假如你项目里用了一些图片音乐,或者三方库资源(三方jar包,so库,dll文件等),你也得告诉jvm在哪里找吧

基于以上三点,我们带着上面的思考来一步一步做吧


1.提取出我们写的代码

打开File -> Project Structure,如下图。

依次点击图中的按钮出现“Empty”和"From modules with dependencies"两个选项。

个人见解:其中Empty只会导出你自己写的代码并且已经编译好了,而不会导出你使用的三方jar包里面的代码,虽然你可以手动添加进去,不过只是以添加文件的形式添加进去,并不会给你编译好,如下图
而"From modules with dependencies"选项则会直接帮我们把所以代码(你自己写的和三方引用的)直接放在一起编译,同时直接生成Mainfest文件,可以说是非常快捷的一种方式了,同时体积自然比上一种要大很多,如下图


让我们来看看两个选项的区别吧


然后我们回到编程界面,点击,点击生成我们的jar包文件,当然build和rebuild都可以的,我们生成的jar包文件在之前系统自动给我们设置的地址中(Output directory),假如你没有更改的话是在这里,

我们直接复制粘贴到桌面即可,当然,为了方便我们还是创一个“SoundTool”的文件夹放它

2.提取我们所用到的资源文件和so库

在这里需要提的就是,在项目里引用的资源文件(当然是你直接放在项目里的,比如resource文件夹下)都是使用相对路径的。
题外话,我们在使用URL时经常访问本地地址,这个时候就需要加上“file:///”,"file://"是固定格式,代表是本地文件,而第三个"/"则代表是文件系统的根目录比如“file:///C:/dir”什么的。
而在项目里面我们访问的时候则不需要这么复杂,可以像“src/main/resources/imgs”这么调用,因为没有“/”号则代表的是项目所在的相对路径,所以假如你在项目里引用了资源文件的话你就需要把文件拿出来,并且放置的位置切合你代码里设置的路径,不然程序会找不到

在资源文件设置好了之后,我们就可以考考三方so库和dll文件的事了。因为在导出jar包的时候,so库和dll文件并未参与编译,但是不要慌,设计者们早就考虑好了,让我们们生成exe文件的时候可以让他们参与连接,让exe文件可以知道在哪里去调用他们(感觉其实就是添加了放置so库和dll文件的路径),所以现在我们得先把他们拿出来。

好了,让我们进入最为复杂的一步吧

3.生成exe文件

首先,你需要一个exe4j的程序,程序可以直接百度找到官网下载,下载方式和安装程序非常简单,这里不过多叙述。

注册码如下:
A-XVK258563F-1p4lv7mg7sav
A-XVK209982F-1y0i3h4ywx2h1
A-XVK267351F-dpurrhnyarva
A-XVK204432F-1kkoilo1jy2h3r
A-XVK246130F-1l7msieqiwqnq
A-XVK249554F-pllh351kcke50
A-XVK238729F-25yn13iea25i
A-XVK222711F-134h5ta8yxbm0
A-XVK275016F-15wjjcbn4tpj
A-XVK275016F-15wjjcbn4tpj
之后点击Next下一步

选择使用jar生成exe,点击Next下一步

点击Next下一步


然后点击Next下一步



之后设置so库和dll文件连接的设置



点击Next下一步





然后点击Next下一步

至此,已经大功告成,剩下的设置已经是我们基本不会更改的了,如语言设置什么的,剩下的就是一路Next

让我们来看看最终的目录结构和运行结果吧


功能正常运行,并且成功读取资源文件。美中不足的是,文件夹整个184Mb的大小,jre文件占了150Mb,这一点暂时不知道怎么解决,如果读者知道请务必告诉我