前言:新建了一个java项目,现在需要将该项目打包成一个可运行的程序,并且编写start.bat和start.sh在windows下和Linux下都可运行,项目主要是一个根据文件日期自动创建层级目录文件夹(文件夹根据日期命名),然后将文件移动到文件夹里。
准备:确保windows和Linux下都安装了jdk且配置了环境变量
1、项目的目录结构如如下图:
1.1 src 下 有 com.trs.file.util包和 log4j..properties 日志配置文件,com.trs.file.util 包存放具体java类
1.2 JRE System Library 为java项目JRE引用,项目使用的是jdk1.8.0
1.3 lib log4j-1.2.17.jar架包引用
1.4 logs 存放 日志文件的文件夹
1.5 根目录下的项目 config.properties 配置文件
2、程序测试通过后,可进行打包,具体步骤为:
2.1、选中项目名,右键(Export)导出,选择java——> JAR file,如图:
2.2,Next下一步,如图:
2.2.1 将 项目结构中 .settings 不用勾选,右侧 .classpath 和 .project 不用勾选,其余目录结构完整保留即可,(网上很多粘贴复制党说只保留 src下文件,后面能坑死人)
2.2.2 选择 JAR file 要导出的路径,自己选择一下导出要存放的路径即可。
3、Next 下一步,如图:
3.1 什么也不用动,直接 next下一步
4、选择程序运行main方法类文件
4.1,选择项目中 程序运行的 main方法所在的类文件,点击browse,在弹出框中就可以看到,点击OK即可,在点击Finish完成。
4.2 ,如果点击Finish时弹出 如图警告提示,表示程序中不被建议(或已弃用)的语法,或者有编译错误,如果已经测试过,没有影响,则不用理会,点击ok就行了。
4.3 查看jar,在步骤 2.2.2中保存的路径下找到 生成的jar查看,如图:
5、 JAR 文件正常导出后,右键选择打开方式选择 使用解压软件打开,并解压到JAR所在目录下(同级),如图:
5.1,解压JAR 方式如图:
5.2 解压后目录结构如图:
6、配置 MANIFEST.MF 文件
6.1 打开META-INF 文件夹下的MANIFEST.MF 文件,如果项目中有外部 jar架包引用,需要在此文件中添加引用配置,如果没有则忽略该步骤即可,由于我在本项目中 添加了 log4j 日志jar包,所以添加配置如下:
Main-Class: 就是 main() 方法所在的类的.class文件的路径,按照上诉步骤自动生成的MANIFEST.MF,我们已经选择了,所以不用管。
添加 Class-Path: 后面跟上一个空格,然后写你引用的jar包名称,最后回车一行,如我的 log4j-1.2.17.jar 放在了根目录下的 lib文件夹下(注意自己的路径),保存即可
6.2 将修改过的 MANIFEST.MF 文件复制,替换掉JAR包里 META-INF 下的 MANIFEST.MF 文件,如果没有对该文件做修改,则忽略该步骤即可。
7、编写 start.bat 运行文件
7.1,在该目录下新建一个记事本,内容如下:
java -Xmx1G -Xms1G -jar rmFileTask.jar
pause
含义:设置程序运行最大最小内存,指定程序运行JAR包就是我们刚刚导出的那个jar包名称,如我的是 rmFileTask.jar
如图:
保存记事本,并重命名文件为 start.bat ,注意修改文件后缀,有些计算机的文件后缀是被隐藏的注意设置一下 后缀为 .bat
最后目录结构如下:
8、双击启动start.bat即可,如图看到程序正常运行,日志输出和在eclipse中一样,代表打包完成。
9、Linux下 start.sh 启动文件编写
9.1如果需要程序在linux系统下也能正常运行,可编写start.sh 启动脚本,步骤如下:
在该 该目录下新建一个记事本,内容如下:
#!/bin/bash
APP_HOME=/home/node1/Desktop/rmFile #项目文件存放路径
APP_CLASSPATH=$APP_HOME/lib #项目架包路径
jarList=$(ls $APP_CLASSPATH|grep jar) #获取所有架包
echo $jarList #遍历引用架包
for i in $jarList
do
APP_CLASSPATH="$APP_CLASSPATH/$i":
done
echo $APP_CLASSPATH
export CLASSPATH=$CLASSPATH:$APP_CLASSPATH
echo $CLASSPATH
java -Xms50m -Xmx250m com.trs.file.util.TimeTask #设置运行内存 和项目运行的mian类
echo Linux Test End
exit
将#号注释部分根据情况替换成 自己实际路径即可,保存并重命名该文件为 start.sh
启动 start.sh
如果报错:
主要原因是start.sh是我在windows下编辑然后上传到linux系统里执行的。.sh文件的格式为dos格式。而linux只能执行格式为unix格式的脚本。
我们可以通过vi编辑器来查看文件的format格式。步骤如下:
1.首先用vi命令打开文件
2.在vi命令模式中使用 :set ff 命令
可以看到改文件的格式为dos
3.修改文件format为unix
方法一:使用vi修改文件format
命令:set ff=unix
最后再次启动 start.sh 可以看到成功运行如图:
附: 完成后的可运行程序压缩包可点击下载 : rmFileTask.rar