文档章节

Springboot 打jar包分离lib,配置文件正确方式(二)

小祝特烦恼
 小祝特烦恼
发布于 2018/08/23 13:23
字数 564
阅读 1.9W
收藏 119

Springboot 打jar包分离lib,配置文件正确方式(二)

背景

从《Springboot 打jar包分离lib,配置文件正确方式》中,可以达到把配置文件和依赖第三方的jar包分离开,但稍显有点臃肿,今天再次提供一种方式,供大家参考。

部署环境

  • window 10
  • redhat 6.4
  • 其他版本没有尝试,应该也是可以的

POM.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.elvish</groupId>
	<artifactId>test</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>test2</name>
	<description>test project for Spring Boot</description>

	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.10.RELEASE</version>
        <relativePath />
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

	<build>
		<finalName>test</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<executions>
					<execution>
						<id>copy-dependencies</id>
						<phase>package</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<outputDirectory>target/lib</outputDirectory>
							<excludeTransitive>false</excludeTransitive>
							<stripVersion>false</stripVersion>
							<includeScope>runtime</includeScope>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<layout>ZIP</layout>
					<includes>
						<include>
							<groupId>cn.jstars</groupId>
							<artifactId>datatocloud</artifactId>
						</include>
					</includes>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<configuration>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
		</plugins>
		<resources>
			<resource>
				<filtering>true</filtering>
				<directory>src/main/resources</directory>
				<excludes>
					<exclude>static/**</exclude>
					<exclude>templates/**</exclude>
					<exclude>*.yml</exclude>
					<exclude>*.properties</exclude>
					<exclude>*.xml</exclude>
					<exclude>*.txt</exclude>
				</excludes>
			</resource>
		</resources>
	</build>

</project>


解释说明

  • maven-dependency-plugin 打出项目依赖的第三方包,放在lib下面
  • spring-boot-maven-plugin springboot打包插件,只保留了项目运行的jar包
  • resources 排除了我们需要外置的文件

运行方式

将target下lib包和test.jar(运行包)以及src/main/resources下你需要外置的文件部署至服务器同一目录下,如

  • lib
  • test.jar
  • *.yml
  • *.xml
  • *.properties
  • static
  • templates

最终运行

java -jar -Dloader.path=.,lib test.jar

完美运行,觉得不错的,点赞一波,收藏一波吧

© 著作权归作者所有

小祝特烦恼

小祝特烦恼

粉丝 39
博文 11
码字总数 9503
作品 0
南京
高级程序员
私信 提问
加载中

评论(12)

a
aliang1992

引用来自“aliang1992”的评论

springboot 2.0+ 版本的 一直不成功,是不是不兼容?

引用来自“小祝特烦恼”的评论

刚刚尝试了一下,并没有发现问题。版本为2.0.5.RELEASE。
我新建了项目,install后只有test报错,添加依赖或将test类删除再次install,没有问题。
你的问题or错误是什么??
能否提供一份测试的源码跑跑?root@sliang.xyz
a
aliang1992

引用来自“aliang1992”的评论

springboot 2.0+ 版本的 一直不成功,是不是不兼容?

引用来自“小祝特烦恼”的评论

刚刚尝试了一下,并没有发现问题。版本为2.0.5.RELEASE。
我新建了项目,install后只有test报错,添加依赖或将test类删除再次install,没有问题。
你的问题or错误是什么??
打包什么都正常 我看jar的内容也正常,但是java -jar -Dloader.path="lib/" test.jar命令启动,一点提示都没有,就感觉运行了一个空的main函数一样直接结束了
小祝特烦恼
小祝特烦恼 博主

引用来自“aliang1992”的评论

springboot 2.0+ 版本的 一直不成功,是不是不兼容?
刚刚尝试了一下,并没有发现问题。版本为2.0.5.RELEASE。
我新建了项目,install后只有test报错,添加依赖或将test类删除再次install,没有问题。
你的问题or错误是什么??
a
aliang1992
springboot 2.0+ 版本的 一直不成功,是不是不兼容?
小祝特烦恼
小祝特烦恼 博主

引用来自“yoke白板”的评论

gradle版本呢
gradle用的不溜,暂没有
小祝特烦恼
小祝特烦恼 博主

引用来自“最后的夏天”的评论

为什么一定要maven配置一大堆老长老长的打包呢, 我直接项目右键 runnable jar , 打出来就是几十k的 可执行jar 和其他依赖的lib目录. 依赖不变的情况下每次只需要更改这几十k的jar就行了
这不就是项目管理maven的长处嘛😃
小祝特烦恼
小祝特烦恼 博主

引用来自“唯风”的评论

不应该看看官方推荐的方式打包么。而且都支持服务注册方式。
仅仅是一个可运行jar,不需要支持服务注册方式。官方推荐的方式,觉得不好用。
最后的夏天
最后的夏天
为什么一定要maven配置一大堆老长老长的打包呢, 我直接项目右键 runnable jar , 打出来就是几十k的 可执行jar 和其他依赖的lib目录. 依赖不变的情况下每次只需要更改这几十k的jar就行了
Raphael_goh
Raphael_goh

引用来自“代码编写者C”的评论

maven的profile不就可以达到效果么。。
用profile要去掉spring-boot-maven-plugin,不然虽然有lib目录,但一样没有卵用
唯风
唯风
不应该看看官方推荐的方式打包么。而且都支持服务注册方式。
SpringBoot_总结_01_配置详解

一、入口类和@SpringBootApplication SpringBoot项目通常有一个名为*Application的入口类,入口方法为此类的main方法。 1. @SpringBootApplication @SpringBootApplication注解是一个组合注解...

shirayner
2018/07/24
0
0
深入源码大白话理解SpringBoot 究竟是如何跑起来的?

前言背景 SprintBoot是当今最流行的项目构建框架,但是大多数人会像我一样开始只会用,怎么搭建项目,怎么让项目跑起来,但是有没有真正去研究一个简简单单的Hello World程序是如何运行起来的...

懿宁19931210
2019/01/09
318
0
关于springboot + dubbo 部署启动方式(Windows版)

项目结构 注:项目构建通过: http://start.spring.io/ 快速构建web 项目, 具体操作可以参考《SpringBoot使用SpringDataJPA完成数据查询 -Demo》。 本次项目搭建应用的组件是springboot + du...

摘星族
2019/01/10
0
0
上传部署SpringBoot项目(Maven)到服务器

现在使用SpringBoot的架构的很显然是越来越受人们的欢迎 ,关于如何搭建SpringBoot项目我在前面也有说到.但是也有很多人在使用了SpringBoot后发现打包上传到服务器上出现了很多问题.为什么不能...

coderzs
2017/11/29
0
0
SpringBoot 究竟是如何跑起来的?

不得不说 SpringBoot 太复杂了,我本来只想研究一下 SpringBoot 最简单的 HelloWorld 程序是如何从 main 方法一步一步跑起来的,但是这却是一个相当深的坑。你可以试着沿着调用栈代码一层一层...

编程SHA
2019/03/11
128
0

没有更多内容

加载失败,请刷新页面

加载更多

Kettle自定义jar包供javascript使用

我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法。所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用。 本篇文章有参考自:https://www...

CREATE_17
昨天
102
0
处理CSV文件中的逗号

我正在寻找有关如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且该值可能带有逗号(例如公司名称)。 我们正在研究的一些想法是:带引号的标识符(值“,”值“,”等)或使用|...

javail
昨天
79
0
如何克隆一个Date对象?

将Date变量分配给另一个变量会将引用复制到同一实例。 这意味着更改一个将更改另一个。 如何实际克隆或复制Date实例? #1楼 简化版: Date.prototype.clone = function () { return new ...

技术盛宴
昨天
73
0
计算一个数的数位之和

计算一个数的数位之和 例如:128 :1+2+8 = 11 public int numSum(int num) { int sum = 0; do { sum += num % 10; } while ((num = num / 10) > 0); return sum;......

SongAlone
昨天
124
0
为什么图片反复压缩后普遍会变绿,而不是其他颜色?

作者:Lion Yang 链接:https://www.zhihu.com/question/29355920/answer/119088684 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 业余版概要:安卓的...

shzwork
昨天
81
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部