现有项目结构如下
Folder
├─class
├─jar
└─src
└─example
│ printer.java
│
└─news
helloWorld.java
class
文件夹待会放编译后的项目,jar
文件夹是放jar包的
printer.java
和helloWorld.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
中
<C:Folder\src> 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
文件夹下运行测试
<C:Folder\class> java example/news/helloWorld
hello world
在class
文件夹下使用命令生成jar包到Folder/jar
<C:Folder\class> jar -cvf ../jar/executable.jar example
可以看到Folder/jar
下生成了后缀为.jar
的文件
Folder
└─jar
executable.jar
在jar
文件夹下运行测试
<C:Folder\jar> java -jar executable.jar
executable.jar中没有主清单属性
可以看到出现了错误,这是因为还没有配置好主类的路径
进入executable.jar
内的META-INF
目录可以看到MANIFEST.MF
文件,将以下属性添加到该文件的第三行以配置主类的路径
Main-Class: example/news/helloWorld
注意MANIFEST.MF
文件的末尾一定要回车留出一空行
运行测试
<C:Folder\jar> 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)