jar包
jar包分类
jar包分为可执行jar包和不可执行jar包
jar包解压后都有一个META-INF/MANIFEST.MF文件
可执行jar包和不可执行jar包的区别是MANIFEST.MF文件里有主类入口配置:Main-Class: com.example.MyClass
注意MANIFEST.MF配置后的冒号后有空格
可执行jar包,直接双击就可以运行,或者同目录下cmd中执行命令:java -jar jar包名.jar
如何生成jar包
(1)javac编译java文件
javac Hello.java
(2)将编译后的Hello.class文件打成jar包
jar -cvf hello.jar Hello.class
c表示要创建一个新的jar包,v表示创建的过程中在控制台输出创建过程的一些信息,f表示给生成的jar包命名
(3)运行jar包
java -jar hello.jar
这时会报如下错误 hello.jar中没有主清单属性
添加Main-Class属性
用压缩软件打开hello.jar,会发现里面多了一个META-INF文件夹,里面有一个MENIFEST.MF的文件,用记事本打开
1 Manifest-Version: 1.0
2 Created-By: 1.8.0_121 (Oracle Corporation)
3
在第三行的位置写入 Main-Class: Hello (注意冒号后面有一个空格,整个文件最后有一行空行),保存
再次运行 java -jar hello.jar ,此时成功在控制台看到 hello ,成功
附:
1 如果有多个java文件,则在编译的时候同时编译,然后将多个class文件同时打包,后续过程相同
2.如果多个java文件不在同一个文件夹,此时需要注意,他们编译后的class还在各自的文件夹,可以
javac A.java bbb/B.java -d target
编译到一个相同的文件夹
3.如果想加入jar,则在编译的时候
javac -cp A.jar B.java
并且在最终生成的jar包中修改MENIFEST.MF,在MENIFEST.MF文件中配置一个新属性:Class-Path,路径指向你需要的所有jar包,引入多个jar包,中间用空格隔开
1 Manifest-Version: 1.0
2 Created-By: 1.8.0_121 (Oracle Corporation)
3 Main-Class: B
4 Class-Path: A.jar
5
4.有的时候我们是在一些集成开发环境中拷贝一些java文件,编译出来的class文件是带着包名的,所以要在jar包中创建相应目录,把class文件移入相应的目录,并且修改MENIFEST.MF
1 Manifest-Version: 1.0
2 Created-By: 1.8.0_121 (Oracle Corporation)
3 Main-Class: com.example.lib.Main
4 Class-Path: A.jar
5
7.想读取jar包内的资源文件,getClass().getResourceAsStream("a.txt")的方法读取输入流