Java命令行下Jar包打包小结

Java命令行下Jar包打包小结

Java命令行下Jar包打包小结

更新时间:2017年12月20日 16:36:52   作者:

这篇文章主要介绍了Java命令行下Jar包打包小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

jar包打包实现

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

java打包清单步骤

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

第一种简单的打包方式

最简单的就是在当前文件夹下将编译的class字节码文件进行打包输出。示例如下:

编写三个java文件,test1.java test2.java 以及Main.java

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文件打包

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

java打包清单步骤

除了编译的三个class文件外多了一个META-INF文件夹java打包清单步骤,里面有一个.MF(清单文件)的文件,这个文件的作用非常重要Java命令行下Jar包打包小结,后面说明。我们先看它里面的内容

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

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

没有主清单属性报错。这是因为我们使用第一种方法生成jar使用了默认的清单,默认清单没有指定程序入口,所以出错。

可以直接更改jar包中的文件(解压工具打开,更改后保存),改成如下效果:

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

java打包清单步骤

在文件中添加了Main-Class属性指定了程序入口,实现了直接执行jar文件。

所以说使用默认的是不能直接执行jar文件,要么使用自己定义的文件打包Java命令行下Jar包打包小结,要么更改包中的文件。

第二种打包方式

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

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

下面看一个例子

同样还是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文件夹下:

java打包清单步骤

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

java打包清单步骤

内容如下:

java打包清单步骤

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

命令行下执行指令:jar cvfm test.jar .MF -C foo/ .

java打包清单步骤

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

java打包清单步骤

正确打包,成功运行jar.

文件介绍

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

java打包清单步骤

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

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

小结

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

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

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » Java命令行下Jar包打包小结

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们