javac -cp tom.jar Hello.class
这里的 -cp 表示 -classpath,指的是把tom.jar加入classpath路径下
(2)将hello.class达成jar包,步骤略
(3)此时运行 java -jar 发现报错 ClassNotFoundException:Tom
原因很简单,引入jar包需要在MENIFEST.MF文件中配置一个新属性:Class-Path,路径指向你需要的所有jar包
【java打jar包的几种方式详解】现在MENIFEST.MF这个文件应该变成
1 Manifest-Version: 1.02 Created-By: 1.8.0_121 (Oracle Corporation)3 Main-Class: Hello4 Class-Path: Tom.jar5 (4)好了,修改这个文件,再次运行,发现成功在控制台输出 hello
tips:引入多个jar包,中间用空格隔开
至此,我们可以总结出,命令变化如下2、jar包中含有jar包——调用jar内的jar输出hello
javac -cp xxx.jar 要编译的文件 -d 目标位置
jar -cvfm 命名 MENIFEST文件 要打包的文件1 要打包的文件2
最终生成的jar包结构
META-INF当项目中我们把所需要的第三方jar包也打进了我们自己的jar包中时,如果仍然按照上述操作方式,会报找不到Class异常 。原因就是jar引用不到放在自己内部的jar包 。
Hello.class
tom.jar
这种情况的具体实现细节比较复杂,我会在后一篇介绍一些知名的java应用是如何加载jar包的,来说明这种情况 。实现方式的简单说明,可以先参考这篇文章:
http://www.cnblogs.com/adolfmc/archive/2012/10/07/2713562.html
三、制作含有资源文件的jar包
1、资源文件在jar包内部——读取jar内的文件
最终生成的jar包结构
META-INF方法步骤
Hello.class
text.txt
1 import java.io.InputStream; 2 import java.io.BufferedReader; 3 import java.io.InputStreamReader; 45 class Hello{ 6 public static void main(String[] args) throws Exception{ 7 Hello hello = new Hello(); 8 InputStream is = hello.getClass().getResourceAsStream("text.txt"); 9 print(is);10 }11 12 /**13 * 读取文件,输出里面的内容,通用方法14 */15 public static void print(InputStream inputStream) throws Exception {16 InputStreamReader reader = new InputStreamReader(inputStream, "utf-8");17 BufferedReader br = new BufferedReader(reader);18 String s = "";19 while ((s = br.readLine()) != null)20 System.out.println(s);21 inputStream.close();22 }23 }2、资源文件在另一个jar包内部——读取另一个jar内的文件
最终生成的jar包结构
hello.jar方法步骤
resource.jar
text.txt
同1一样,只不过需要在MENIFEST文件中将resource.jar加入classpath
1 import java.io.InputStream; 2 import java.io.BufferedReader; 3 import java.io.InputStreamReader; 45 class Hello{ 6 public static void main(String[] args) throws Exception{ 7 Hello hello = new Hello(); 8 InputStream is = hello.getClass().getResourceAsStream("text.txt"); 9 print(is);10 }11 12 /**13 * 读取文件,输出里面的内容,通用方法14 */15 public static void print(InputStream inputStream) throws Exception {16 InputStreamReader reader = new InputStreamReader(inputStream, "utf-8");17 BufferedReader br = new BufferedReader(reader);18 String s = "";19 while ((s = br.readLine()) != null)20 System.out.println(s);21 inputStream.close();22 }23 }3、资源文件在jar包外部——读取jar外的文件
最终生成的jar包结构
hello.jar方法步骤
text.txt
1 import java.io.InputStream; 2 import java.io.BufferedReader; 3 import java.io.InputStreamReader; 4 import java.io.FileInputStream; 56 class Hello{ 7 public static void main(String[] args) throws Exception{ 8 Hello hello = new Hello(); 9 InputStream is = new FileInputStream("text.txt");10 print(is);11 }12 13 /**14 * 读取文件,输出里面的内容,通用方法15 */16 public static void print(InputStream inputStream) throws Exception {17 InputStreamReader reader = new InputStreamReader(inputStream, "utf-8");18 BufferedReader br = new BufferedReader(reader);19 String s = "";20 while ((s = br.readLine()) != null)21 System.out.println(s);22 inputStream.close();23 }24 }出处:
https://www.cnblogs.com/mq0036/p/8566427.html
推荐阅读
- 长平之战赵国为什么投降,赵国如果不打长平之战
- 不笑你打我笑话?笑话好笑不笑你揍我
- 五部门严打农村食品假冒伪劣违法犯罪?甘肃省查处生产销售假冒伪劣商品行为条例
- 曾国藩是李鸿章有什么关系吗,李鸿章打压曾国藩儿子
- QQ无法打开的腾讯微云页面,怎么办
- java的三大控制流程基础结构
- JavaScript遍历对象方法总结,原来有这么多,你掌握了几种?
- Java并发工具类的简单使用
- 乌克兰官宣加入北约 遭拜登打脸?波兰加入北约,我们回家了
- 吕布手下将领被曹操所杀,吕布为什么会被曹操打败