之前开发的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. ngixn配置

    nginx 配置入门 之前的nginx配置是对nginx配置文件的具体含义进行讲解,不过对于nginx的新手可能一头雾水. 今天看到个文档不错,翻译过来分享给大家,可以让新手更详细地了解nginx配置 ...

  2. php常用面试题

    1. 有一列数的规则如下 1.1.2.3.5.8.13.21.34... 求第30位数是多少.写出相关函数和算法名称 //$pxx = array(1,1);//for($i=2;$i<=29; ...

  3. js屏蔽广告

    最近遇到有些广告的问题,首先是在手机端,可能是用户访问了一些小网站的,(你懂得),然后在访问我的网站时,会带小广告过来,通常是wifi被dns劫持的情况下导入到广告脚本, 1.处理这些要知道广告的根源 ...

  4. Git命令汇总(基础篇)

    自己用Git有一段时间了,随着项目越来越多,功能分支也随之增加,从简单的基础命令到随心所欲,需要自己不断地去尝试总结,下面来分享一下我的Git使用总结. 本章基础篇主要讲解一些Git代码提交流程和Gi ...

  5. jQuery选取所有复选框被选中的值并用Ajax异步提交数据

    昨天和朋友做一个后台管理系统项目的时候涉及到复选框批量操作,如果用submit表单提交挺方便的,但是要实现用jQuery结合Ajax异步提交数据就有点麻烦了,因为我之前做过的项目中基本上没用Ajax来 ...

  6. “use strict” 严格模式使用(前端基础系列)

    ECMAscript5添加一种严格模式的运行模式("use strict"),让你的js语句在更加严格的环境下进行运行: 一.主要作用: 消除版本javascript中一些不合理及 ...

  7. oracle 恢复数据到某个时间点

    delete from tablename;insert into tablename select * from tablename as of timestamp to_timestamp('20 ...

  8. 如何在Raspberry Pi 3B中安装Windows 10 IoT Core

    Windows 10 IoT Core简介 Windows 10 IoT是微软专门为物联网生态打造的操作系统,Windows 10 IoT Core则是Windows 10 IoT 操作系统的核心版本 ...

  9. Python爬虫(十六)_JSON模块与JsonPath

    本篇将介绍使用,更多内容请参考:Python学习指南 数据提取之JSON与JsonPATH JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它是的人们很容易 ...

  10. Android 当打开“开发人员模式”中的“不保留活动”后,程序应当怎么保持正常执行

    Android 当打开"开发人员模式"中的"不保留活动"后,程序应当怎么保持正常执行咧. .? 在这几天,我一直在纠结这个问题.从发现,程序出现这个问题,是由于 ...