以一次写文章有点激动哈,如有写错的地方悄悄告诉我哦。
回归正题,最近工作需要做一个java的小引用(swt画窗口)。引用做完后需要打包成jar,这里遇到了一大堆坑。下面一一列举
1打包工程:右键需要打包的工程-->export选择JAR file 点击next
选择好保持路径后可以直接点击Finish(注:MANIFEST.MF文件会在打包的时候自动生成)
2修改MANIFEST.MF文件:
2.1:修改程序入口和引用的第三方jar包
这里需要注意:Manifest-Version、Main-Class、Class-Path后需要添加一个空格
Class-Path换行后需要两个空格,否则会报:Error: A JNI error has occurred, please check your installation and try again 的提示
在最后面需要换行。否则会报:Error: Invalid or corrupt jarfile ***.jar的提示
Main-Class程序入口没写会提示:错误: 找不到或无法加载主类。
Main-Class程序入口写错会提示:找不到主类:*****。
下面附MANIFEST.MF文件内容
Manifest-Version: 1.0
Main-Class: ****
Class-Path: libs/org.eclipse.swt.win32.win32.x86_64_3.110.0.v20190305-0602.jar
libs/org.eclipse.core.commands_3.9.300.v20190215-1957.jar
libs/org.eclipse.core.runtime_3.15.200.v20190301-1641.jar
libs/org.eclipse.equinox.common_3.10.300.v20190218-2100.jar
libs/org.eclipse.equinox.registry_3.8.300.v20190218-2100.jar
libs/org.eclipse.jface_3.15.100.v20190222-1334.jar
libs/org.eclipse.jface.text_3.15.100.v20190305-0811.jar
libs/org.eclipse.osgi_3.13.300.v20190218-1622.jar
libs/org.eclipse.text_3.8.100.v20190306-1823.jar
libs/org.eclipse.ui.forms_3.7.500.v20190216-1545.jar
libs/org.eclipse.ui.workbench_3.113.0.v20190219-1432.jar
libs/com.ibm.icu_63.1.0.v20181030-1705.jar
libs/decaf-annotations.jar
这时候有人会去cmd执行:java - jar ***.jar还是报错无法找到第三方jar(Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite)
如果程序有问题执行会报:Error: Invalid or corrupt jarfile ***.jar
下面是本人打包jar的文件夹
有人会发现libs这个目录:没错里面的libs就是相对要执行jar的相对路径(注意:不能用绝对路径。网上说的。本人还没没去验证QAQ)
复制好引用到的第三方jar双击要执行的jar就可以正常运行啦。
由于jar的运行必须基于jdk环境,但是应用可能是给别人用的。可以动态配置下环境变量。
新建***.bat复制一下脚本(jdk版本自己选择)然后双击就可以在没安装jdk的电脑使用啦。
set SRC=%cd%
set JAVA_HOME=%SRC%\jdk1.8.0_181
set PATH=%JAVA_HOME%\bin;%PATH%
set CLASSPATH=.
java -jar ppj.jar
如有写错,请指出,谢谢啦。