java jar 可执行_java基础-可执行jar包

1 简介

大家都知道java项目可以打包成一个可执行的jar包,当我们指定程序的入口main后,可以利用 java -jar YourApp.jar 命令运行可执行jar。那么它需要什么条件才能运行呢?在eclipse java工程和maven工程该怎么打包和部署呢?下面将一一解答。

1.1 运行java -jar app.jar命令的背后

当我们在命令窗口运行java -jar app.jar时,虚拟机做了什么事呢?其实要解答这个问题,就要深入类加载器机制,这已经超出了本文的范围。我们只需要知道,虚拟机使用多个类加载器加载class文件。其中app CLassLoader会获取jar包中的 META-INF/MANIFEST.MF文件,并加载文件中指定的class文件。MANIFEST.MF文件列出了该jar包需要依赖的jar包、可执行jar的入口程序,版本号等。

MANIFEST.MF如下图所示:

934efa54fc884d0f354e81ae90f9d0bc.png

至于MANIFEST.MF的格式和如何编写不在本文的范围。

** Manifest-Version ** 清单文件的版本

** Main-Class ** 主程序所在class的全路径

** Class-Path ** 可执行jar依赖的包路径,所指的路径与可执行文件同一目录路径

1.2 需求

** 目的:可执行JAR在控制台输出字符串,主程序中依赖apache的commons-lang3包对字符串进行拼接**

package com.github.thinwonton.jarstarter;

import org.apache.commons.lang3.StringUtils;

public class JarStarterMain {

public static void main(String[] args) {

String string = StringUtils.join("JarStarterMain--->", "main"); // 合并字符串

System.out.println(string);

}

}

最终jar包和第三方jar所在的目录结构

JarStarter

JarStarter.jar

lib

commons-lang3-3.5.jar

** 运行结果 **

555cd605b5cd1a941bbdb08969c8dc3d.png

2 eclipse导出可执行jar文件

java工程结构

8b471c9d70ba781d306fca798d474e3e.png

** 创建自定义MANIFEST.MF文件**

文件内容如下,注意文件最后需要空两行,否则导出jar时,eclipse不会包含Main-Class这行。

Manifest-Version: 1.0

Main-Class: com.github.thinwonton.jarstarter.JarStarterMain

Class-Path: ./lib/commons-lang3-3.5.jar

** 使用eclipse的jar导出功能 **

9418a8c6f50e85852e9e1e3175696ef7.png

d18cb3170fc4111ceee44b51b8de2659.png

292c94e150a795e243d983fc39f44ea2.png

这时可执行jar已经导出到 f:/JarStarter 文件夹中,我们再把工程所依赖的jar包复制到 f:/JarStarter/lib 文件夹就可用命令jar -jar JarStarter.jar 运行了。

3 maven工程编译可执行jar文件

要编译和打包可执行jar文件,需要借助maven的两个插件:maven-jar-plugin和maven-dependency-plugin。前一个是打包可执行jar文件的,后一个是拷贝依赖包的。下面是它们的具体用法。

pom.xml

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.github.thinwonton.java

jarstarter-maven

0.0.1-SNAPSHOT

jar

org.apache.commons

commons-lang3

3.5

jarstarter

org.apache.maven.plugins

maven-resources-plugin

2.7

UTF-8

org.apache.maven.plugins

maven-compiler-plugin

3.2

1.7

1.7

UTF-8

org.apache.maven.plugins

maven-jar-plugin

2.6

target/classes/

false

true

lib/

com.github.thinwonton.jarstarter.JarStarterMain

org.apache.maven.plugins

maven-dependency-plugin

2.10

copy

package

copy-dependencies

${project.build.directory}/lib

在工程根目录下运行 mvn clean package ,这时maven构建工具会在target文件夹中生成 jarstarter.jar 文件 和 lib文件夹,lib文件夹包含有工程所依赖的jar包。 这时jarstarter.jar的清单文件内容:

Manifest-Version: 1.0

Archiver-Version: Plexus Archiver

Built-By: Administrator

Class-Path: commons-lang3-3.5.jar

Created-By: Apache Maven 3.3.9

Build-Jdk: 1.8.0_102

Main-Class: com.github.thinwonton.jarstarter.JarStarterMain

4 参考资料

本文涉及代码

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值