Java命令行下Jar包打包小结
jar包打包实现 jar包打包可以使用jar指令实现打包,在命令行中输入jar可以查看jar指令的内容 从最后显示的两个示例看出存在两种打包的方法,两者的区别就是是否使用自己定义的MANIFEST清单文件。第一个示例没有使用MANIFEST文件进行打包,所以最终生成的jar包中MANIFEST文件为默认文件,这种方式适用于比较简单的jar包结构,不存在其他jar包依赖以及生成的jar包不需要可执行。这种方式生成的jar包不能使用 第一种简单的打包方式 最简单的就是在当前文件夹下将编译的class字节码文件进行打包输出。示例如下: public class test1 { public static void main(String[] args) { } public void display() { System.out.println("this is class test1"); } } 以及test2.java 文件 public class test2 { public static void main(String[] args) { } public void display() { System.out.println("this is class test2"); } } Main.java public class Main { public static void main(String[] args) { for(String a:args) { System.out.println("给定的参数"+a); } test1 t1 = new test1(); t1.display(); test2 t2 = new test2(); t2.display(); } } 命令行下将这三个文件进行编译,使用javac命令实现编译。 用jar指令将编译的class文件打包 打包过程中有显示已添加清单。用解压工具打开生成的 除了编译的三个class文件外多了一个META-INF文件夹,里面有一个MANIFEST.MF(清单文件)的文件,这个文件的作用非常重要,后面说明。我们先看它里面的内容 非常简单的清单,只包含清单版本与java版本。 这个时候执行 没有主清单属性报错。这是因为我们使用第一种方法生成jar使用了默认的清单,默认清单没有指定程序入口,所以出错。 再一次执行 在MANIFEST文件中添加了Main-Class属性指定了程序入口,实现了直接执行jar文件。 第二种打包方式 第二种打包方式更加通用,一般情况下java文件第一行都是 注意 上面的指令中 下面看一个例子 同样还是test1.java与test2.java以及Main.java 但是各自有自己的包名。 package cn.mytest1; public class test1 { public static void main(String[] args) { } public void display() { System.out.println("this is class test1"); } } package cn.mytest2; public class test2 { public static void main(String[] args) { } public void display() { System.out.println("this is class test2"); } } package cn.mymain; import cn.mytest1.test1; import cn.mytest2.test2; public class Main { public static void main(String[] args) { for(String item:args) { System.out.println("传递参数"+item); } test1 t1 = new test1(); test2 t2 = new test2(); t1.display(); t2.display(); } } 同样使用javac 指令编译,三个class文件存在于不同的路径下,因为他们包名不一样。把编译号的含有class文件的文件夹全部放在foo文件夹下: 然后在foo 外面写一个MANIFEST文件: MANIFEST内容如下: 注意:MANIFEST 文件最后一行是空行。 命令行下执行指令: 在命令行下测试jar包是否能够直接运行了,使用指令 正确打包,成功运行jar. MANIFEST文件介绍 通过上面的两个例子,可以看到MANIFEST文件对于jar打包都是必须的。MANIFEST文件描述了打包后的jar文件的详细信息,存在于打包后的META-INF 的文件夹.一个简单的MANIFEST文件主要内容如下: 主要就是Manifest-Version Main-Class Class-Path这三个属性在制作jar包时非常重要.Manifest-Version 是版本号,照着写就行。Main-Class则是jar包的入口程序,指定运行的类的全称(一定要包含包名),这样可以使用 注意每个MANIFEST属性冒号与内容之间都有一个空格,并且写完后最后还要留有一行空行,不然运行时还是出现找不到主清单属性的错误 小结 jar文件打包容易出错的地方就是Manifest清单文件的编写,容易出一些格式上的错误比如属性的冒号和内容之间少空格,Class-Path中添加依赖之间没有空格,依赖文件过多,多行书写的时候每行开头没加空格,文件最后一行没有空行等等。写MANIFEST文件的时候注意这些关键的地方就不会在打包上面耗费太多的时间。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |