java文件生成jar包

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

image

Hello.java中编写代码:

1
2
3
4
5
6
7
package com.priv.djc.learn;

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

执行以下命令生成jar包

1
2
3
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

1
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下创建需要的子目录。

1
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.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


java文件生成jar包
https://jcdu.top/2021/09/05/java文件生成jar包/
作者
horizon86
发布于
2021年9月5日
许可协议