java打jar包的几种方式详解( 二 )


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包,中间用空格隔开

至此,我们可以总结出,命令变化如下
javac -cp xxx.jar 要编译的文件 -d 目标位置
jar -cvfm 命名 MENIFEST文件 要打包的文件1 要打包的文件2
2、jar包中含有jar包——调用jar内的jar输出hello
最终生成的jar包结构
META-INF
Hello.class
tom.jar
当项目中我们把所需要的第三方jar包也打进了我们自己的jar包中时,如果仍然按照上述操作方式,会报找不到Class异常 。原因就是jar引用不到放在自己内部的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




推荐阅读