之前开发的java程序由于依赖比较多的jar包,启动命令为” java -classpath .:lib/*.jar 主类名“,这种启动方式需要指定类路径、入口类名称,并存在jar包缺失隐患。

现在利用SpringBoot的maven打包插件,可以将依赖的jar包都整理到一个jar文件中。

一、创建maven项目

名字随便起。这里叫ConfigClient。在pom.xml文件中使用如下插件。

指定mainClass,注意这个mainClass不是当前项目的类,是我们自己写的程序的主类。

 <plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.bonc.tool.Tool2</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>

SpringBoot打包插件

二、打包

mvn package

三、进入到target中

1.解压jar文件

jar xf ConfigClient.jar 

得到三个目录:

(1)org 应用入口类,负责加载校验jar包

(2)BOOT-INF 包含两个目录

  lib classes, lib用来存放所有被依赖的jar包,classes是存放我们自己开发的程序

(3)META-INF 包含一个本文的中心文件MANIFEST.MF 在启动java程序时会首先读取这个文件,来获得主类路径。

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: ChaseForFuture
Start-Class: com.bonc.tool.Tool2 # pom文件所写的mainClass,在BOOT-INF/classes/中
Spring-Boot-Classes: BOOT-INF/classes/ # 我们自己写的所有程序
Spring-Boot-Lib: BOOT-INF/lib/ # 我们的程序依赖的jar包
Spring-Boot-Version: 1.5.9.RELEASE
Created-By: Apache Maven 3.2.1
Build-Jdk: 1.8.0_131
Main-Class: org.springframework.boot.loader.PropertiesLauncher # java应用程序入口类

2.移动文件

如果我们写的程序没有打包为jar文件,这里将它们放入 BOOT-INF/classes中

如果我们写的程序已经打包为jar文件,这里将jar文件以及依赖的所有jar包放入 BOOT-INF/lib中

3.不压缩式打包

jar -cvfM0 ConfigClient.jar BOOT-INF META-INF org

-c表示create即创建新文件

-v表示列出verbose详细信息

-f指定文件名字

-M不创建新的MANIFEST.MF

-0 不进行压缩,仅将文件整理到一起。

这个0必须加上,表示不压缩。因为内部jar包已经压缩了,这里再次压缩,会造成内部jar无法读取。

4.运行jar包

java -jar ConfigClient.jar

这时,一个可运行的jar包可以使用了。

java应用的jar包多合一的更多相关文章

  1. java项目打jar包的两种情况

    链接地址:http://jingyan.baidu.com/article/6b97984d8a6ddc1ca2b0bfa0.html 本文介绍一下java项目打jar包时的两种情况各怎么操作   方 ...

  2. IntelliJ IDEA导出Java 可执行Jar包

    原文:IntelliJ IDEA导出Java 可执行Jar包 保证自己的Java代码是没有问题的,在IDEA里面是可以正常运行的,然后,按下面步骤: 打开File -> Project Stru ...

  3. eclipse生成【带有外部jar包】的java可执行jar包

    之前有写过一篇使用eclipse生成java可执行jar包,但是最近的一次使用中无论如何都不成功,当双击执行打成的jar时,弹出如下错误: could not find the main class: ...

  4. SoapUI接口测试-验签值处理-调用java的加密jar包

    转载自:https://www.jianshu.com/p/7c672426a165 一. 背景: 调用接口时有个请求参数是对请求入参按一定规则进行加密生成的验签值,每次不同参数的请求生成唯一的验签值 ...

  5. java反射查看jar包中所有的类名方法名

    不反编译,不用其他工具,用java反射查看jar包中所有的类名方法名,网上很多都报错,下面这个你试试看:话不多说直接撸代码: import java.lang.reflect.Field; impor ...

  6. Linux上java程序的jar包启动通用脚本(稳定用过)

    Linux上java程序的jar包启动通用脚本如下: #! /bin/sh export LANG="zh_CN.GBK" SERVICE_NAME=` .sh` SCRIPT_N ...

  7. java命令启动jar包

    本人对这些命令也是一知半解,记录备用. 1. 使用java命令行执行java文件 # 设置命令窗口标题 title test1 # 开启输出 @echo on # 设置环境变量JAVA_HOME se ...

  8. 高版本 eclipse 如何安装 fatjar 插件以及使用 fatjar 将 Java 程序打成 Jar 包

    高版本 eclipse 如何安装 fatjar 插件以及使用 fatjar 将 Java 程序打成 Jar 包 Eclipse Version: Neon.3 Release (4.6.3) Welc ...

  9. Jmeter用BeanShell Sampler调用java写的jar包进行MD5加密

    [前言] 在工作中,有时候我们请求的参数可能需要加密,比如登录接口中的密码做了加密操作,今天我就给大家介绍一种方法:Jmeter用BeanShell Sampler调用java写的jar包进行MD5加 ...

随机推荐

  1. 基于文本图形(ncurses)的文本搜索工具 ncgrep

    背景 作为一个VIM党,日常工作开发中,会经常利用grep进行关键词搜索,以快速定位到文件.如图: 利用grep进行文本搜索 但是,这一过程会有两个效率问题: 展示的结果无法进行直接交互,需要手动粘贴 ...

  2. UITextField的使用小技巧

    [tf setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];//修改placeHolder ...

  3. 【二十三】php之预定义超全局变量

    php提供了九种预定义超全局变量: $_GET.$_POST.$_REQUEST.$_SERVER.$_ENV.$_FILE. $_COOKIE.$_SESSION. $GLOBALS 1.$_GET ...

  4. github与git之间怎么建立连接

    git是一款强大的分布式版本控制系统,到底是什么意思呢?其实我也不知道,以后知道了再补上吧.下面咱们来讲一下github怎么与你电脑上的git建立起连接关系. 一.你要有一个github账号. 去百度 ...

  5. 反射---hasattr、getattr、setattr、delattr

    class Foo: f = "类的静态变量" def __init__(self,name,age): self.name = name self.age = age def s ...

  6. How to get table pg_stat_user_functions.

    修改配置文件postgres.conf track_functions = all                   # none, pl, all 或者 在当前事物中设置 postgres=# s ...

  7. svn up出现类似svn: Error converting entry in directory '.' to UTF-8问题解决

    执行svn up命令报错如下 # svn up svn: Error converting entry svn: Valid UTF- data (hex:) followed by invalid ...

  8. poj 1797 Heavy Transportation(最大生成树)

    poj 1797 Heavy Transportation Description Background Hugo Heavy is happy. After the breakdown of the ...

  9. 用HTML5实现的各种排序算法的动画比較

    用HTML5实现的各种排序算法的动画比較 非常有意思,详见: http://www.webhek.com/misc/comparison-sort/

  10. Nginx事件处理中的connection和read、write事件的关联

    /*********************************************************************  * Author  : Samson  * Date   ...