使用命令生成可执行jar包

现有项目结构如下

Folder
    ├─class
    ├─jar
    └─src
        └─example
            │  printer.java
            │
            └─news
                    helloWorld.java

class文件夹待会放编译后的项目,jar文件夹是放jar包的
printer.javahelloWorld.java源码如下

//printer.java
package example;

public class printf{
    
    public String str;
    
    public void setS(String s){
        str = s;
    }
    
    public void print(){
        System.out.println(str);
    }
}

//helloWorld.java
package example.news;

public class helloWorld{
    
    public static void main(String[] args){
        example.printer put = new example.printer();
        put.setS("hello world");
        put.print();
    }   
}

src文件夹下使用命令编译源文件输出到Folder/class

 javac example/printer.java example/news/helloWorld.java -d ../class

此时项目结构如下

Folder
    ├─class
    │  └─example
    │      │  printer.class
    │      │
    │      └─news
    │              helloWorld.class
    │
    ├─jar
    └─src
        └─example
            │  printer.java
            │
            └─news
                    helloWorld.java

class文件夹下运行测试

 java example/news/helloWorld
hello world

class文件夹下使用命令生成jar包到Folder/jar

 jar -cvf ../jar/executable.jar example

可以看到Folder/jar下生成了后缀为.jar的文件

Folder
    └─jar
           executable.jar

jar文件夹下运行测试

 java -jar executable.jar
executable.jar中没有主清单属性

可以看到出现了错误,这是因为还没有配置好主类的路径

进入executable.jar内的META-INF目录可以看到MANIFEST.MF文件,将以下属性添加到该文件的第三行以配置主类的路径

Main-Class: example/news/helloWorld

注意MANIFEST.MF文件的末尾一定要回车留出一空行

运行测试

 java -jar executable.jar
hello world

这是本文所使用的java环境

java version "16.0.2" 2021-07-20
Java(TM) SE Runtime Environment (build 16.0.2+7-67)
Java HotSpot(TM) 64-Bit Server VM (build 16.0.2+7-67, mixed mode, sharing)

你可能感兴趣的:(使用命令生成可执行jar包)