java生成可执行jar
java生成可执行jar 非常简单
使用myeclipse直接export-->jar导出 选择main方法的类就ok
但是如果jar引用了其他的jar 必须在Manifest文件中引入jar
例如:
Manifest-Version: 1.0
Main-Class: Main
Class-Path: axis/activation.jar axis/axis.jar axis/axis-ant.jar axis/commons-discovery-0.2.jar
axis/commons-logging-1.0.4.jar axis/commons-logging-1.1.jar axis/commons-logging-api-1.1.jar
axis/jaxrpc.jar axis/log4j-1.2.8.jar axis/mail.jar aixs/saaj.jar axis/serializer-2.7.1.jar
aixs/wsdl4j-1.5.1.jar axis/xalan-2.7.1.jar aixs/xercesImpl-2.9.1.jar
axis/xercesImpl.jar aixs/xercesSamples.jar axis/xml-apis-1.3.03.jar
aixs/xml-apis.jar axis/xmlParserAPIs.jar axis/xmlsec-1.4.4.jar
axis/xmlsecSamples-1.4.4.jar axis/xmlsecTests-1.4.4.jar axis/quartz-all-1.7.3.jar
jar包太多全部放在一行 会导致错误
必须换行 换行的行 开头和结尾必须要有一个空格
axis/commons-logging-1.0.4.jar 的意思是 必须在可执行jar 同一目录下的axis子目录下的commons-logging-1.0.4.jar
或者使用jdk自带的jar命令 jre是没有jar.exe 如果是使用jre 那就从jdk中拷贝一个jar.exe到bin目录 同时复制一份 bin下面的server目录 修改为
client 就行了 在cmd命令中键入 jar /?出现jar的帮助
可以先整理出一份目录 比如是c:\yjj下面是所有的类结构文件 即包结构和报下面的类 同时建一个 Manifest.mf文件
比如内容是 :
Manifest-Version: 1.0
Main-Class: Main
引入jar参考上面
利用cmd命令 进入该目录 cd c:/yjj
比如jdk在E:\java\jre\bin\目录下
使用命令 E:\java\jre\bin\jar cvfm yjj.jar manifest.mf -c ./
./ 表示打包当前目录下的所有文件 如果你不到yjj目录下而是到c盘的话 把./改成 c:/yjj jar包中多了一个yjj目录
所以必须到要打包的目录中才能执行这个命令
执行的话 cmd命令下 java -jar 可执行.jar
如果jar包数量太多 觉得Class-Path太多 可以使用-Djava.ext.dirs 参数 jdk6+可用
例如
java -Djava.ext.dirs=引用的lib库的路径;可执行jar的路径 -jar 可执行jar路径\可执行jar名称.jar
java -Djava.ext.dirs=E:\workspace\posgui\lib;E:\workspace\posgui -jar E:\workspace\posgui\pos.jar
如果可执行jar的路径 不放在里面 会导致主方法 找不到可执行jar中所有其他引用的类
即使使用-cp和-classpath都不行
例如 主方法是在com.auto.frame.AutoFrame中 在main中引用了ABC类 ABC类也在pos。jar中
使用如下方式都会失败
1。java -Djava.ext.dirs=E:\workspace\posgui\lib -jar E:\workspace\posgui\pos.jar
2. java -Djava.ext.dirs=E:\workspace\posgui\lib -jar -classpath E:\workspace\posgui E:\workspace\posgui\pos.jar
3. java -Djava.ext.dirs=E:\workspace\posgui\lib -jar -cp E:\workspace\posgui E:\workspace\posgui\pos.jar
pos.jar的manifest.mf文件只需要 主方法即可例如
Manifest-Version: 1.0
Main-Class: com.auto.frame.AutoFrame