Java命令行下Jar包打包小结

2025-05-29 0 78

jar打包实现

jar打包可以使用jar指令实现打包,在命令行中输入jar可以查看jar指令的内容

Java命令行下Jar包打包小结

从最后显示的两个示例看出存在两种打包的方法,两者的区别就是是否使用自己定义的manifest清单文件。第一个示例没有使用manifest文件进行打包,所以最终生成的jar包中manifest文件为默认文件,这种方式适用于比较简单的jar包结构,不存在其他jar包依赖以及生成的jar包不需要可执行。这种方式生成的jar包不能使用java -jar xxx.jar命令执行,因为manifest文件中未指定程序入口。而第二个实例是比较常用的打包方式,即是使用自定义的manifest文件参与打包,这样能够实现往包中添加依赖,并且可以指定程序入口,实现java -jar xxx.jar 直接运行jar包。

第一种简单的打包方式

最简单的就是在当前文件夹下将编译的class字节码文件进行打包输出。示例如下:
编写三个java文件,test1.java test2.java 以及main.java

?

1

2

3

4

5

6

7

8

9

10
public class test1

{

public static void main(string[] args)

{

}

public void display()

{

system.out.println("this is class test1");

}

}

以及test2.java 文件

?

1

2

3

4

5

6

7

8

9

10
public class test2

{

public static void main(string[] args)

{

}

public void display()

{

system.out.println("this is class test2");

}

}

main.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14
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命令实现编译。

Java命令行下Jar包打包小结

jar指令将编译的class文件打包

Java命令行下Jar包打包小结

打包过程中有显示已添加清单。用解压工具打开生成的test.jar包,可以看到如下的结构:

Java命令行下Jar包打包小结

除了编译的三个class文件外多了一个meta-inf文件夹,里面有一个manifest.mf(清单文件)的文件,这个文件的作用非常重要,后面说明。我们先看它里面的内容

Java命令行下Jar包打包小结

非常简单的清单,只包含清单版本与java版本。

这个时候执行java -jar test.jar有如下效果:

Java命令行下Jar包打包小结

没有主清单属性报错。这是因为我们使用第一种方法生成jar使用了默认的清单,默认清单没有指定程序入口,所以出错。
可以直接更改jar包中的manifest文件(解压工具打开,更改后保存),改成如下效果:

Java命令行下Jar包打包小结

再一次执行java -jar test.jar 后程序输入正确内容:

Java命令行下Jar包打包小结

在manifest文件中添加了main-class属性指定了程序入口,实现了直接执行jar文件。
所以说使用默认的manifest是不能直接执行jar文件,要么使用自己定义的manifest文件打包,要么更改包中的manifest文件。

第二种打包方式

第二种打包方式更加通用,一般情况下java文件第一行都是package xxx;即是包名,也决定了编译后的class文件存在的路径。当有多个java文件要编译打包并且他们存在不同的包名时,如果还是按照第一种方法打包时一个文件一个文件的写非常不现实,所以有了第二种方法。将所有要打包的class文件存在的目录以及依赖的jar包全部放在一个根文件夹里面(比如是foo),然后编写manifest清单文件,指定程序入口以及其他添加的依赖的jar包。在执行指令:

Java命令行下Jar包打包小结

注意 上面的指令中foo/ 文件夹后面有一个空格还有一个点

下面看一个例子

同样还是test1.java与test2.java以及main.java 但是各自有自己的包名。

?

1

2

3

4

5

6

7

8

9

10

11
package cn.mytest1;

public class test1

{

public static void main(string[] args)

{

}

public void display()

{

system.out.println("this is class test1");

}

}

?

1

2

3

4

5

6

7

8

9

10

11
package cn.mytest2;

public class test2

{

public static void main(string[] args)

{

}

public void display()

{

system.out.println("this is class test2");

}

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17
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文件夹下:

Java命令行下Jar包打包小结

然后在foo 外面写一个manifest文件:

Java命令行下Jar包打包小结

manifest内容如下:

Java命令行下Jar包打包小结

注意:manifest 文件最后一行是空行。

命令行下执行指令:jar cvfm test.jar manifest.mf -c foo/ .

Java命令行下Jar包打包小结

命令行下测试jar包是否能够直接运行了,使用指令java -jar test.jar

Java命令行下Jar包打包小结

正确打包,成功运行jar.

manifest文件介绍

通过上面的两个例子,可以看到manifest文件对于jar打包都是必须的。manifest文件描述了打包后的jar文件的详细信息,存在于打包后的meta-inf 的文件夹.一个简单的manifest文件主要内容如下:

Java命令行下Jar包打包小结

主要就是manifest-version main-class class-path这三个属性在制作jar包时非常重要.manifest-version 是版本号,照着写就行。main-class则是jar包的入口程序,指定运行的类的全称(一定要包含包名),这样可以使用java -jar name.jar直接运行jar包。第三个class-path是指的打包时需要依赖的其他jar包,打包的时候自己的程序中也可能含有其他的jar包所以要添加依赖。

注意每个manifest属性冒号与内容之间都有一个空格,并且写完后最后还要留有一行空行,不然运行时还是出现找不到主清单属性的错误

小结

jar文件打包容易出错的地方就是manifest清单文件的编写,容易出一些格式上的错误比如属性的冒号和内容之间少空格,class-path中添加依赖之间没有空格,依赖文件过多,多行书写的时候每行开头没加空格,文件最后一行没有空行等等。写manifest文件的时候注意这些关键的地方就不会在打包上面耗费太多的时间。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:http://blog.csdn.net/allocator/article/details/51704846

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java命令行下Jar包打包小结 https://www.kuaiidc.com/113315.html

相关文章

发表评论
暂无评论