springboot打jar包将引用的第三方包、配置文件(.properties、.xml)、静态资源打在包外_springboot 引用的包会打到-程序员宅基地

技术标签: spring boot  java  maven  jar  

前言

01—外置配置文件

1. Springboot读取核心配置文件(.properties)优先读取:jar包当前目录下的/config目录,因此要外置配置文件就在jar所在目录新建config文件夹,然后放入配置文件。

2.  项目中我们会用到xml来实例bean、定时任务、日志(使用springboot集成日志插件无需引入)等,因此需要引入对应的xml,步骤1中我们在jar包同级目录下新建了config文件夹,所以这些乱七八糟的东西都放在config文件夹下,想要调用他们首先我们要找到config文件夹的路径,好的方法没找到,只能用笨办法了,就是在配置文件中增加一条配置,配置config文件夹所在的目录。

.properties文件中添加如下键值对(绝对路径):

springboot.jar.path=D:/stsworkspace/config

02—外置静态资源

静态资源访问采用thymeleaf,在配置文件中将spring.thymeleaf.prefix配置成外部地址。

切记外部资源引用 格式:file:xxx/xxx/xx 

03—外置第三方jar包

通常第三方jar包打进jar包里,但是导致程序jar资源过大,所以也可以和步骤1一样,在项目jar包同级目录下新建lib文件夹,用于存放第三方jar,这个只需要在pom.xml打包时候,打包插件分离出来就可以了。

下面来看实际操作

测试用的项目结构如图

1.首先pom.xml中打包插件,源码如下

<build>
    <resources>
      <!--防止过滤掉代码中xml-->
         <resource>
          <directory>src/main/java</directory>
          <includes>
             <include>**/*.xml</include>
          </includes>
         </resource>
      </resources>
    <plugins>
             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
            <!--拷贝资源文件-->
           <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-resources-plugin</artifactId>
              <executions>
                <!--拷贝配置文件-->
                  <execution>
                      <id>copy-resources</id>
                      <phase>package</phase>
                      <goals>
                          <goal>copy-resources</goal>
                      </goals>
                      <configuration>
                          <outputDirectory>${project.build.directory}/config</outputDirectory>
                          <resources>
                              <resource>
                                  <directory>src/main/resources</directory>
                                  <!-- 去除静态资源和页面资源 -->
                                  <excludes>
                            <exclude>templates/**</exclude>
                            <exclude>static/**</exclude>
                        </excludes>
                                  <filtering>true</filtering>
                              </resource>
                          </resources>
                          <encoding>UTF-8</encoding>
                      </configuration>
                  </execution>
                  <!--拷贝页面文件-->
                  <execution>
                      <id>copy-html</id>
                      <phase>package</phase>
                      <goals>
                          <goal>copy-resources</goal>
                      </goals>
                      <configuration>
                          <outputDirectory>${project.build.directory}/templates</outputDirectory>
                          <resources>
                              <resource>
                                  <directory>src/main/resources/templates</directory>
                                  <filtering>true</filtering>
                              </resource>
                          </resources>
                          <encoding>UTF-8</encoding>
                      </configuration>
                  </execution>
                  <!--拷贝静态资源文件-->
                  <execution>
                      <id>copy-static</id>
                      <phase>package</phase>
                      <goals>
                          <goal>copy-resources</goal>
                      </goals>
                      <configuration>
                          <outputDirectory>${project.build.directory}/static</outputDirectory>
                          <resources>
                              <resource>
                                  <directory>src/main/resources/static</directory>
                                  <filtering>true</filtering>
                              </resource>
                          </resources>
                          <encoding>UTF-8</encoding>
                      </configuration>
                  </execution>
              </executions>
          </plugin>
         <!--拷贝资源jar copy-lib-->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
               <execution>
                  <id>copy-lib</id>
                  <phase>package</phase>
                  <goals>
                     <goal>copy-dependencies</goal>
                  </goals>
                  <configuration>
                     <outputDirectory>${project.build.directory}/lib</outputDirectory>
                     <excludeTransitive>false</excludeTransitive>
                     <stripVersion>false</stripVersion>
                     <includeScope>runtime</includeScope>
                  </configuration>
               </execution>
            </executions>
         </plugin>
         
      
       <!--打包jar-->
           <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
              <configuration>
                  <!--不打包资源文件-->
                  <excludes>
              <exclude>*.properties</exclude>
            <exclude>*.yml</exclude>
            <exclude>*.xml</exclude>
            <exclude>*.txt</exclude>
            <exclude>static/**</exclude>
            <exclude>templates/**</exclude>
                  </excludes>
                  <archive>
                      <manifest>
                        <addClasspath>true</addClasspath>
                        <!--指定第3方入口类-->
              <classpathPrefix>lib/</classpathPrefix>
              <useUniqueVersions>false</useUniqueVersions>
                          <!--指定项目启动入口类-->
                          <mainClass>com.SpringbootToJarApplication</mainClass>
                      </manifest>
                  </archive>
                  <outputDirectory>${project.build.directory}</outputDirectory>
              </configuration>
           </plugin>
    </plugins>
  </build>

2.主配置文件application.properties

#项目发布根路径(上下文路径),项目名称 ps:前面一定加/
server.servlet.context-path=/springboot_to_jar#多配置
spring.profiles.active=test

# thymeleaf
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=file:${spring.jar.path}/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.content-type=text/html

application-test.properties

#修改端口号
server.port=8080

#日志路径
logging.file.path=D:/springBoot/123#jar包所在位置
spring.jar.path=D:/stsworkspace/springboot_to_jar/target
sdf=123


3.启动类SpringbootToJarApplication.java

package com;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
@SpringBootApplication
//引入xml
@ImportResource(locations={"file:${spring.jar.path}/config/initBean.xml"})public class SpringbootToJarApplication {
  public static void main(String[] args) {
    SpringApplication.run(SpringbootToJarApplication.class, args);
  }
}

ok 了 打包

打包结果:


将文件拖出

打开jar

里面无配置文件、无引入的第3方包、无静态资源,只有我们的代码。

cmd 切换到jar包目录 执行:java -jar springboot_to_jar.jar

搞定了 以后只更新我们的代码就可以了,修改配置文件 只要重启一下就ok了

微信扫一扫
关注该公众号

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/y_k_1_2_3_4/article/details/104723433

智能推荐

关于XML解析报错问题(LF、CRLF)-程序员宅基地

文章浏览阅读2.1k次。报错内容的主要部分:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position123: illegal multibyte sequence问题产生在做目标检测时,使用的数据集来自网络,在将xml和图片转换到特定格式时,有些xml文件解析出现了问题。像这样:我发现,当我未使用labelImg工具,而直接通过记..._xml解析报错

C1083_qt 提升自定义控件 no such file or directory-程序员宅基地

文章浏览阅读145次。在使用QT过程中会自定义一些控件。比如:自定义了一个树形控件。使用的时候,在界面上拖动创建一个树形控件,然后使用“提升为”当前自定义的树形控件。提升之后的结果:但是编译的时候,出现了错误:\GeneratedFiles\ui_QtGuiUserDraw.h(23): fatal error C1083: 无法打开包括文件: “userdrawgeotree.h”: No such file or directory (编译源文件 QtGuiUserDraw.cpp)1。_qt 提升自定义控件 no such file or directory

java中所有的类都继承于_Java中所有的类都是通过直接或间接地继承( )类得到的...-程序员宅基地

文章浏览阅读4.2k次。Java中所有的类都是通过直接或间接地继承( )类得到的答:java.lang.Object关于主机地址 192.168.19.125 (子网掩码: 255.255.255.248 ),以下说法正确答:广播地址为:192.168.19.127 ; 网络地址为:192.168.19.120 ;在小儿基本手法中,逆运内八卦的功效是?(??)答:宽胸利膈,行滞消食对事物的知觉是答:人脑对直接作用感官的..._java中所有的类都是通过直接或间接地继承( )类得到的。 2分 a、java.lang.object

【幻化万千戏红尘】qianfengDay21-java基础学习:进程、线程、Timer-程序员宅基地

文章浏览阅读222次。课程回顾:面向对象数组异常常用类集合IO流今日内容:进程:应用程序运行时,产生的独立的应用程序,拥有独立的代码和存储空间多进程:操作系统可以并发的执行多个进程线程:进程内部的一条执行路径多线程:java语言支持程序内部进行多线程开发进程内部可以有多个线程线程的作用:可以分担压力,提高性能主要用来完成耗时

重生奇迹mu武器镶嵌顺序-程序员宅基地

文章浏览阅读71次。例如:雷1J10%冰技能+37火每等级,这样就可以30%出现属性,如果没有出,可以破坏某一个洞,继续镶嵌同属性的宝石,直到定现为止,由于1J雷和37技能冰的比较贵,所以可以破坏火荧石,不断镶嵌到出现属性为止。荧光宝石可从以前的物品中获得。从上到下的镶嵌顺寻按照雷、冰、火镶嵌,就有30%的概率出现技能攻击力加11的幸运荧光属性。从上到下的镶嵌顺寻按照土、风、水镶嵌,就有30%的概率出现最大生命值+29的幸运荧光属性。从上到下的镶嵌顺寻按照火、冰、雷镶嵌,就有30%的概率出现攻击力加11的幸运荧光属性。

人工智能第三章(1)——无信息搜索(盲目搜索) (附书本资料)_无信息搜索又称为-程序员宅基地

文章浏览阅读8.8k次,点赞21次,收藏51次。这篇文章的意义在于哪里呢?1)向大家展示如何形式化定义一个搜索问题,又如何去求解;2)通过讲述各种盲目搜索算法,帮大家梳理无信息搜索的脉络。_无信息搜索又称为

随便推点

OpenCV 2.4.8组件结构全解析_opencv2.4 build结构-程序员宅基地

文章浏览阅读501次。之前啃了不少OpenCV的官方文档,发现如果了解了一些OpenCV整体的模块架构后,再重点学习自己感兴趣的部分的话,就会有一览众山小的感觉,于是,就决定写出这篇文章,作为启程OpenCV系列博文的第二篇。 至于OpenCV组件结构的研究方法,我们不妨管中窥豹,通过opencv安装路径下include目录里面头文件的分类存放,来一窥OpenCV这些年迅猛发展起来的庞杂组件架构。_opencv2.4 build结构

source insight遇到__attribute__解析不到函数_sourceinsight识别不了特殊的函数类型-程序员宅基地

文章浏览阅读7.2k次,点赞10次,收藏8次。bestboyxie 励志做一名能帮助到他人的程序员,如果你觉得这篇文章对你有帮助,麻烦你点赞最近分析DPDK代码的时候遇到 __attribute__这种东西。就无法解析对应的函数,跳转苦不堪言:如果你遇到这个问题,然后有幸,看到了我的文章。告诉你有幸啦打开 source insight 安装目录C:\Program Files (x86)\Sou_sourceinsight识别不了特殊的函数类型

Android 单独抽取 WebRtc-VAD(语音端点检测) 模块_android webrtc vad-程序员宅基地

文章浏览阅读3.7k次,点赞3次,收藏10次。本文基于webrtc最新源码进行抽取编译做简单讲解。最终目的是Android 单独抽取 WebRtc-VAD 模块,封装好JNI层,并且ndk-build出so库。希望对大家有所帮助,有需要看JNI层实现和完整demo的,请加我V:15092216090先来看一下vad模块的头文件,webrtc_vad.h,该文件路径为common_audio\vad\include\webrtc_v..._android webrtc vad

夏天到,装饰器让Python秀出性感属性:Property+Decorators+-+Getters,+Setters,+and+Deleters_@property (decorators)-程序员宅基地

文章浏览阅读262次。John Smith曾经是我的好基友,没有之一,今天我们拿他做个试验:初始代码,我们做一个打印员工John Smith信息的类,实例emp_1会用类属性输出:class Employee: def __init__(self, first, last): self.first = first self.last = last self.email = first + "." + last + '@email.com' def fullnam_@property (decorators)

Oracle单个字段多记录拼接_oracle 一个字段多条记录的拼接-程序员宅基地

文章浏览阅读2.4k次。sql查询中,一个字段多个结果拼接的两种方式_oracle 一个字段多条记录的拼接

vue 项目中 html中出现clear错误_[vue/comment-directive] clear-程序员宅基地

文章浏览阅读934次。clear报错_[vue/comment-directive] clear