jar

jar

如果将java项目编译成一个jar包?如何运行一个jar。本文略做记录。

相关资源

相关知识

关于jar中的META-INF/MANIFEST.MF详解:

参见:https://www.cnblogs.com/jayworld/p/9767228.html

示例1

Manifest-Version: 1.0
Created-By: 1.8.0_241 (Oracle Corporation)
Main-Class: com.java.app.Main

注意点:

1、类似于yml的语法,即冒号后面需要增加空格。

2、好像文件末尾需要空行。

示例2

Manifest-Version: 1.0
Main-Class: addJarPkg #Main-Class为主类名称
Class-Path: lib/java-mysql-connecter.jar #如果需要用到第三方jar包,需要在此注明,多个jar包之间用空格分隔,最后一个jar包后面加两个空格

示例3

Manifest-Version: 1.0
Created-By: Apache Ant 1.5.1
Extension-Name: Struts Framework
Specification-Title: Struts Framework
Specification-Vendor: Apache Software Foundation
Specification-Version: 1.1
Implementation-Title: Struts Framework
Implementation-Vendor: Apache Software Foundation
Implementation-Vendor-Id: org.apache
Implementation-Version: 1.1
Class-Path:  commons-beanutils.jar commons-collections.jar commons-dig
 ester.jar commons-logging.jar commons-validator.jar jakarta-oro.jar s
 truts-legacy.jar

打包jar包

参见:https://www.cnblogs.com/jayworld/p/9765474.html

方式一:

假设有这样一个目录com/java/app,注意,整个执行命令行操作,没有切换目录。

mkdir -p com/java/app
touch com/java/app/Main.java
# 将下面的内容写入到文件中
cat > com/java/app/Main.java <<EOL

其中,java文件内容为:

package com.java.app;

class Main{
    public static void main(String[] args){
        for ( int i=0; i < 10; i++) {
            System.out.println("hello world" + i);
        }
    }
}

然后,com的同级目录中(注意,没有切换路径),执行:

javac  com/java/app/Main.java
java com/java/app/Main

然后,上述的代码,就能顺利的运行起来。

但是,如果我们想打包为,可运行的jar包呢?

jar -cvf com.jar com

上述打包的jar包,不能运行,会报如下错误:

com.jar中没有主清单属性

那么,修改com.jarcom.jar.zip,再修改jar包里面的META-INF/MANIFEST.MF文件。即增加Main-Class内容:

冒号后面,需要增加一个空格。

Manifest-Version: 1.0
Created-By: 1.8.0_241 (Oracle Corporation)
Main-Class: com.java.app.Main

修改后的文件,再更改为com.jar,再次执行下面的命令,即可。

java -jar com.jar

方式二:

也许上面的步骤有些啰嗦,尤其是增加MANIFEST.MF文件,其实上打包的时候,也可以自己指定:

jar -cvfm com.jar com/META-INF/MANIFEST.MF  com

可以将MANIFEST.MF放到pwd路径,然后,更方便:

jar -cvfm com.jar MANIFEST.MF  com

如果,不怕晕,执行下面命令,但是注意,下述命令,打包出来的文件结果跟上面文件结构略有区别。:

jar -cvfm com.jar MANIFEST.MF  -C com .

现在,了解,jar有点类似tar的命令,命令结果都差不多。

运行jar包

执行下面命令即可。

java -jar com.jar