热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

通过Maven构建打包Springboot,并将config配置文件提取到jar文件外

如果通过不同的IDE打包,着实会觉得依赖性太大,并且容易出现错误,操作也比较复杂同时,spring-boot-maven-plugin的使用感觉,相关配置太少,并且无法满足方便部署和运行

如果通过不同的IDE打包,着实会觉得依赖性太大,并且容易出现错误,操作也比较复杂 

同时,spring-boot-maven-plugin的使用感觉,相关配置太少,并且无法满足方便部署和运行的需求。 


这里我们使用了,Maven的如下插件 下载 

maven-jar-plugin,负责将应用程序打包成可执行的jar文件 
maven-assembly-plugin,负责将整个项目按照自定义的目录结构打成最终的压缩包,方便实际部署 



需求1,将依赖的jar提取到可运行的jar文件之外,我们使用maven-jar-plugin来实现 

比如我的项目最终的打包目录如下 下载 
 
代码目录结构如下 
 

最终的可运行文件jar文件并不包含依赖的jar包,所有依赖的jar包都放在和ps.jar平行的lib文件夹内,这样如果以后想快速部署,就不用每一次都把体积很大的lib包都要传一遍,除非依赖包有所变化,当然这些都是后续如果想这么做的前提,我这里还是为了使部署的文件比较规整 
这里的maven-jar-plugin的配置文件如下 下载 

Xml代码  下载 

  1. <plugin>  

  2.                 <groupId>org.apache.maven.pluginsgroupId>  

  3.                 <artifactId>maven-jar-pluginartifactId>  

  4.                 <version>2.6version>  

  5.                 <configuration>  

  6.                     <archive>  

  7.                       

  8.   

  9.                         <manifest>  

  10.                             <mainClass>com.vmpay.pay.AppmainClass>  

  11.                               

  12.                     <appendAssemblyId>falseappendAssemblyId>  

  13.                     <descriptors>  

  14.                         <descriptor>src/main/build/package.xmldescriptor>  

  15.                     descriptors>  

  16.                 configuration>  

  17.                 <executions>  

  18.                     <execution>  

  19.                         <id>make-assemblyid>  

  20.                         <phase>packagephase>  

  21.                         <goals>  

  22.                             <goal>singlegoal>  

  23.                         goals>  

  24.                     execution>  

  25.                 executions>  

  26.             plugin>  



重点的就是package.xml的路径了,使用maven-assembly-plugin的相关配置实际上都在这个文件里面 
package.xml的文件内容 

Xml代码  下载 

  1. xml version="1.0" encoding="UTF-8"?>  

  2. <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

  3.   xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">  

  4.     <id>packageid>  

  5.     <formats>  

  6.         <format>zipformat>  

  7.     formats>  

  8.     <includeBaseDirectory>trueincludeBaseDirectory>  

  9.     <fileSets>  

  10.         <fileSet>  

  11.             <directory>bindirectory>  

  12.             <outputDirectory>/outputDirectory>  

  13.         fileSet>  

  14.         <fileSet>  

  15.             <directory>src/main/resourcesdirectory>  

  16.             <outputDirectory>/outputDirectory>  

  17.         fileSet>  

  18.         <fileSet>  

  19.             <directory>${project.build.directory}directory>  

  20.             <outputDirectory>/outputDirectory>  

  21.             <includes>  

  22.                 <include>*.jarinclude>  

  23.             includes>  

  24.         fileSet>  

  25.     fileSets>  

  26.     <dependencySets>  

  27.         <dependencySet>  

  28.             <outputDirectory>liboutputDirectory>  

  29.             <scope>runtimescope>  

  30.   

  31.             <excludes>  

  32.   

  33.                 <exclude>${groupId}:${artifactId}exclude>  

  34.             excludes>  

  35.         dependencySet>  

  36.     dependencySets>  

  37. assembly>  


其他相关配置可参看官方文档 下载 
[url] 
http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_unpackOptions 
[/url] 

这里面我配置了,最终压缩的文件格式,为zip,也就是最终打包出来的是一个zip的文件,然后发布到服务器上进行解压部署,相关我要的配置都在这个压缩包内,解压即可直接使用 

下面的fileSets中配置了我需要将那些文件打包到我的最终压缩包中, 
我的配置文件包括了启动脚本bin文件夹,里面放着shell的启动脚本, 
相关的配置文件src/main/resources,里面放着整个程序提取的properties等相关的配置文件 
最终可运行的jar文件,使用了${project.build.directory}变量,也就是通过maven-jar-plugin生成的那个jar文件 
dependencySets里面配置了依赖库最终输出到lib文件夹下,与上面的maven-jar-plugin配置生成的manifest文件路径相对应,这样可运行jar就会按照manifest的路径来找相应的文件进行加载 


start.sh 

Shell代码  下载 

  1. ###启动  

  2.   

  3. #!/bin/sh  

  4.   

  5. moduleName="ps"  

  6. pidPath="/var/run/$moduleName-tpid"  

  7.   

  8. rm -f $pidPath  

  9.   

  10. nohup java -jar ./$moduleName.jar -server -Xms1024m -Xmx2048m -Xss256k > ./run.log 2>&1 &  

  11.   

  12. echo $! > $pidPath  


stop.sh 

Shell代码  下载 

  1. ###停止  

  2.   

  3. moduleName="ps"  

  4.   

  5. tpid=`cat /var/run/$moduleName-tpid | awk '{print $1}'`  

  6. tpid=`ps -aef | grep $tpid | awk '{print $2}' |grep $tpid`  

  7. if [ ${tpid} ]; then  

  8. kill -9 $tpid  

  9. fi  




推荐阅读
  • 一、Tomcat安装后本身提供了一个server,端口配置默认是8080,对应目录为:..\Tomcat8.0\webapps二、Tomcat8.0配置多个端口,其实也就是给T ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 本文深入探讨了如何利用Maven高效管理项目中的外部依赖库。通过介绍Maven的官方依赖搜索地址(),详细讲解了依赖库的添加、版本管理和冲突解决等关键操作。此外,还提供了实用的配置示例和最佳实践,帮助开发者优化项目构建流程,提高开发效率。 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 使用ArcGIS for Java和Flex浏览自定义ArcGIS Server 9.3地图
    本文介绍了如何在Flex应用程序中实现浏览自定义ArcGIS Server 9.3发布的地图。这是一个基本的入门示例,适用于初学者。 ... [详细]
  • 本文介绍了如何使用Java和PDFBox库根据坐标值对PDF文件进行局部切割的方法。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 在本地环境中部署了两个不同版本的 Flink 集群,分别为 1.9.1 和 1.9.2。近期在尝试启动 1.9.1 版本的 Flink 任务时,遇到了 TaskExecutor 启动失败的问题。尽管 TaskManager 日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由 Kafka 版本不兼容引起的。通过调整 Kafka 客户端配置并升级相关依赖,最终成功解决了这一故障。 ... [详细]
  • 今天我开始学习Flutter,并在Android Studio 3.5.3中创建了一个新的Flutter项目。然而,在首次尝试运行时遇到了问题,Gradle任务 `assembleDebug` 执行失败,退出状态码为1。经过初步排查,发现可能是由于依赖项配置不当或Gradle版本不兼容导致的。为了解决这个问题,我计划检查项目的 `build.gradle` 文件,确保所有依赖项和插件版本都符合要求,并尝试更新Gradle版本。此外,还将验证环境变量配置是否正确,以确保开发环境的稳定性。 ... [详细]
  • 深入解析HTTP网络请求API:从基础到进阶的全面指南
    本文全面解析了HTTP网络请求API,从基础到进阶,详细介绍了Android平台上的两种原生API——HttpUrlConnection和HttpClient。这两种API通过对底层Socket的封装,提供了高效、灵活的网络通信功能。文章不仅涵盖了基本的使用方法,还深入探讨了性能优化、错误处理和安全性等方面的高级主题,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
author-avatar
吃货程序猿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有