java文件生成jar包

创建项目文件夹demo1demo1结构如下图:

image

Hello.java中编写代码:

package com.priv.djc.learn;

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

执行以下命令生成jar包

cd demo1
javac -d bin src\com\priv\djc\learn\Hello.java
jar -cvfe new.jar com.priv.djc.learn.Hello -C bin com\priv\djc\learn\Hello.class

命令解读:
java的包名要和目录名匹配,所以我的目录有com\priv\djc\learn

javac -d bin src\com\priv\djc\learn\Hello.java

javac将java文件编译为.class,一个类生成一个class,-d指定生成位置,默认是和代码文件在同一目录。javac编译好的文件放在bin\com\priv\djc\learn\Hello.class。javac会自动在bin下创建需要的子目录。

jar -cvfe new.jar com.priv.djc.learn.Hello -C bin com\priv\djc\learn\Hello.class

jar命令将.class文件打包为jar文件。-c表示创建jar包,-v表示输出详细信息,-f表示后边指定了输出的jar包的名字,-e表示后边有入口类的名字。-C指定一个文件夹,进入这个文件夹再打包。

new.jar是产生的jar包,com.priv.djc.learn.Hello是主类名字,com\priv\djc\learn\Hello.class是要打包的class文件。

jar命令有些坑:

  • cvfe这些指令必须写在前面,但是-C除外。然后后面跟着你需要的文件名、类名就行,顺序无所谓,会自动根据后缀名识别。千万不能是java -cv -f new.jar -e com.priv.djc.learn.Hello.....,会把你这些选项都识别成文件,报错。
  • -C选项是必须的,因为要把文件夹按结构打包到jar包里,如果你不进入bin再打包,就会把bin也打包进去,但是显然类名和包名是没有bin的

完事后会在demo1下产生new.jar,执行java -jar new.jar,控制台输出Hello World

posted @ 2021-09-05 21:35  王冰冰  阅读(793)  评论(0)    收藏  举报