将Java程序打jar包并运行
2016-02-29 19:10
801 查看
1)接着上篇博客继续说手动编译之后,将代码打成jar包,然后直接“java -jar lz.jar"运行不成功的问题。还是先上代码:
这个是Demo类:
接下来,这个是调用了Demo类的ImportDemo类,并且这两个类不在一个包中:
参考上篇博客(/article/6421350.html)手动编译之后,结果如下:
生成lz.jar包。
提示如下:
这是因为jar包中的META-INF\MANIFEST.MF中没有添加Main-Class属性(Main-Class:之后紧跟一个空格,然后再输入(org.lz.demo.b.ImportDemo
),也就是主类,添加之后此文件内容是:
然后使用这个清单文件,重新生成jar包,将修改后的MANIFEST.MF拷贝,与org在同一个目录下,然后使用如下命令重新生成jar包:
jar cfm lz.jar MANIFEST.MF org( jar cfm [jar 文件名] [附加清单文件名] [导入文件])
然后,再执行:
java -jar lz.jar;
程序成功运行。截图如下:
参考:http://zh.wikihow.com/%E8%BF%90%E8%A1%8C.jar%E5%BD%A2%E5%BC%8F%E7%9A%84Java%E7%A8%8B%E5%BA%8F
2)但是,如果Demo类和ImportDemo类都引用了第三方的jar包,再按照这个方法就会提示找不到所引用的第三方库,这就是classloader没有加载成功的原因,具体提示如下:
解决方法,同样是修改MANIFEST.MF清单文件的内容,添加“Class-Path”属性。添加后的内容如下:
嗯嗯,将引用的两个库的相对路径作为“Class-Path”的值(:号紧跟一个空格)如果有多个引用库,彼此以空格隔开。然后再使用这个清单文件重新生成jar包
jar cfm lzSRC.jar MANIFEST.MF lz
然后 java -jar lzSRC.jar
程序成功运行,如下所示:
以上是参考(/article/5019601.html)中,第三种方法。
这个是Demo类:
package org.lz.demo.a ; public class Demo{ public String getContent(){ return "oh,yeah,done!" ; } };
接下来,这个是调用了Demo类的ImportDemo类,并且这两个类不在一个包中:
package org.lz.demo.b ; // 定义一个包 import org.lz.demo.a.Demo; public class ImportDemo{ public static void main(String args[]){ System.out.println(new Demo().getContent()); } };
参考上篇博客(/article/6421350.html)手动编译之后,结果如下:
jar -cvf lz.jar org
生成lz.jar包。
java -jar lz.jar
提示如下:
这是因为jar包中的META-INF\MANIFEST.MF中没有添加Main-Class属性(Main-Class:之后紧跟一个空格,然后再输入(org.lz.demo.b.ImportDemo
),也就是主类,添加之后此文件内容是:
Manifest-Version: 1.0 Created-By: 1.8.0_60 (Oracle Corporation) Main-Class: org.lz.demo.b.ImportDemo
然后使用这个清单文件,重新生成jar包,将修改后的MANIFEST.MF拷贝,与org在同一个目录下,然后使用如下命令重新生成jar包:
jar cfm lz.jar MANIFEST.MF org( jar cfm [jar 文件名] [附加清单文件名] [导入文件])
然后,再执行:
java -jar lz.jar;
程序成功运行。截图如下:
参考:http://zh.wikihow.com/%E8%BF%90%E8%A1%8C.jar%E5%BD%A2%E5%BC%8F%E7%9A%84Java%E7%A8%8B%E5%BA%8F
2)但是,如果Demo类和ImportDemo类都引用了第三方的jar包,再按照这个方法就会提示找不到所引用的第三方库,这就是classloader没有加载成功的原因,具体提示如下:
解决方法,同样是修改MANIFEST.MF清单文件的内容,添加“Class-Path”属性。添加后的内容如下:
Manifest-Version: 1.0 Created-By: 1.8.0_60 (Oracle Corporation) Main-Class: lz.src.gauss.gauss Class-Path: lib\jmatio.jar lib\jblas-1.2.4.jar
嗯嗯,将引用的两个库的相对路径作为“Class-Path”的值(:号紧跟一个空格)如果有多个引用库,彼此以空格隔开。然后再使用这个清单文件重新生成jar包
jar cfm lzSRC.jar MANIFEST.MF lz
然后 java -jar lzSRC.jar
程序成功运行,如下所示:
以上是参考(/article/5019601.html)中,第三种方法。
相关文章推荐
- JAVA开发环境配置
- [转载] Java字符串格式化
- java中的list、set与map
- Java BIO、NIO、AIO 学习
- 解决Myeclipse 8.5上新建的项目无法在Eclipse上运行的办法
- Eclipse输入Java和XML代码自动提示功能最简单的方法
- Java工程师成神之路~
- Java解决高精度计算问题
- 【慕课笔记】第六章 JAVA中的集合框架(下) 第3节 学生选课——获取List中课程的位置
- Spring注解详解
- Spring Boot 连接MySql数据库
- 快速排序算法剖析
- 关于fragment
- java 使用 comet4j 主动向客户端推送信息 简单例子
- Spring Scheduling详解
- 浅谈spring
- myeclipse 生成jar包后,spring无法扫描到bean定义
- 四道Java基础题
- Java不变类
- Java访问权限