如果通过不同的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的配置文件如下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<!-- 添加index则不从mainfest中读取classpath,而是从Index.list中读取 -->
<!-- <index>true</index> -->
<manifest>
<mainClass>com.vmpay.pay.App</mainClass>
<!-- to create a class path to your dependecies you have to fill true
in this field -->
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<!--<classpathLayoutType>custom</classpathLayoutType> <customClasspathLayout>
lib/$${artifact.groupId}.$${artifact.artifactId}.$${artifact.extension} </customClasspathLayout> -->
</manifest>
<manifestEntries>
<Class-Path>./</Class-Path>
</manifestEntries>
</archive>
<excludes>
<exclude>config/**</exclude>
</excludes>
</configuration>
</plugin>
其中manifest的部分是核心,在可执行的jar文件中,打包后会在jar文件内的META-INF文件夹下,生成一个MANIFEST.MF文件,里面记录了可执行文件的一些相关配置,比如像上面一段代码中所配置的内容,这里面就配置了可执行jar文件未来读取classpath的相对目录位置在什么地方,以及引入的jar文件都有哪些,上面的配置就是classpath目录是./(稍后会解释为什么)
mainClass配置表示,哪个class作为程序的入口来执行
addClasspath配置表示,是否将依赖的classpath一起打包
classpathPrefix配置表示,依赖的classpath的前缀,也就是打包后生成的MANIFEST.MF文件里,引入的jar文件都会加上前缀,lib/,比如fastjson-1.2.7.jar,在mainfest文件里就会是lib/fastjson-1.2.7.jar
excludes配置表示,排除哪些文件夹不被打包进去
其实maven-jar-plugin主要就是配置了MANIFEST.MF这个文件而已,就是让可执行文件知道自己怎么执行,加载哪些文件执行的描述,剩下的工作交由maven-assembly-plugin来处理
在pom文件中配置类似如下
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!-- not append assembly id in release file name -->
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/build/package.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
重点的就是package.xml的路径了,使用maven-assembly-plugin的相关配置实际上都在这个文件里面
package.xml的文件内容
<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>package</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>bin</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<scope>runtime</scope>
<!-- <unpack>false</unpack> -->
<excludes>
<!-- <exclude>${project.name}-${project.version}</exclude> -->
<exclude>${groupId}:${artifactId}</exclude>
</excludes>
</dependencySet>
</dependencySets>
</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
###启动
#!/bin/sh
moduleName="ps"
pidPath="/var/run/$moduleName-tpid"
rm -f $pidPath
nohup java -jar ./$moduleName.jar -server -Xms1024m -Xmx2048m -Xss256k > ./run.log 2>&1 &
echo $! > $pidPath
stop.sh
###停止
moduleName="ps"
tpid=`cat /var/run/$moduleName-tpid | awk '{print $1}'`
tpid=`ps -aef | grep $tpid | awk '{print $2}' |grep $tpid`
if [ ${tpid} ]; then
kill -9 $tpid
fi
以上内容仅供参考
经过以上配置,把zip的压缩包上传到线上进行解压,直接运行start.sh即可
- 大小: 44 KB
- 大小: 58 KB
分享到:
相关推荐
赠送Maven依赖信息文件:nacos-config-spring-boot-autoconfigure-0.2.7.pom; 包含翻译后的API文档:nacos-config-spring-boot-autoconfigure-0.2.7-javadoc-API文档-中文(简体)版.zip; Maven坐标:...
在Spring Boot项目中,使用Maven进行打包是一个常见的任务,特别是在开发过程中,我们需要构建可部署的jar或war文件。这个过程不仅包括编译Java代码,还包括处理资源文件,如.properties, .xml, 和 .yml文件,这些...
- 使用`mvn clean package`命令,Maven会编译源代码、运行测试并打包成可执行的JAR或WAR文件。 5. **项目结构**: - 根据给定的压缩包文件名称`jscprj-6.8`,我们可以推测项目可能包含以下几个关键目录: - `src...
通过在POM中设置打包类型为`war`,并添加相关的插件和依赖,Maven能够自动构建出可部署的WAR文件。 3. **JAR工程**:对于非Web的微服务,我们可以创建JAR工程。Maven的`maven-jar-plugin`插件可以帮助我们将Java...
- 将应用程序打包为可执行的JAR文件,并通过`java -jar`命令启动。 #### 5. Spring Boot自动配置的原理 Spring Boot的自动配置原理是通过`@SpringBootApplication`或`@EnableAutoConfiguration`注解触发的。其核心...
赠送Maven依赖信息文件:nacos-config-spring-boot-autoconfigure-0.2.7.pom; 包含翻译后的API文档:nacos-config-spring-boot-autoconfigure-0.2.7-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:...
Spring Boot是基于Spring框架的快速开发工具,通过预设默认配置,减少了传统Spring项目的繁琐配置。它内置了Tomcat服务器,支持“嵌入式”部署,使得应用可以直接运行为jar包。 2. **Spring Boot 2.3.5特性** - ...
在Web应用上部署Maven Spring Boot项目涉及到一系列步骤,这些步骤包括项目构建、云平台的选择、Java运行环境的配置以及应用程序的发布。以下是一个详细的指南: 1. **构建 Maven Spring Boot 项目**: - 首先,...
Spring Boot应用可以直接打包为可执行的JAR或WAR文件,方便通过Java -jar命令运行。也可以部署到传统的应用服务器如Tomcat。 总结,Spring Boot以其简洁的配置、丰富的生态和对微服务的友好支持,成为现代Java开发...
3. ** Starter 依赖**:Spring Boot通过一系列预定义的Starter POMs(如web、data-jpa、security等)简化Maven或Gradle构建。这些Starter依赖提供了快速启动特定功能所需的全部依赖,开发者只需引入相应依赖即可。 ...
spring boot 核心配置文件是 application.properties 和 bootstrap.properties,两者之间的区别是 application.properties 用于配置应用程序的配置,而 bootstrap.properties 用于配置应用程序的 Bootstrap 配置。...
首先,我们需要在 Maven 或 Gradle 的配置文件中添加 Mybatis 和其 Spring Boot 的 starter 依赖。接着,在 resources 目录下创建 mybatis 的配置文件(mybatis-config.xml),定义数据源和事务管理器。同时,创建 ...
通过使用`spring-boot-maven-plugin`或`spring-boot-gradle-plugin`,开发者可以构建包含所有依赖的自包含JAR,这使得部署和运行更加简单。源码中可以看到这些插件的配置及其生成自包含JAR的逻辑。 在Spring Boot ...
在Java开发领域,Spring Boot因其简洁的配置和强大的功能,成为了构建Web应用的首选框架。在实际项目中,我们往往需要根据不同的部署环境(如开发、测试、生产)创建定制化的打包文件。`maven-assembly-plugin`是...
1. **安装Oracle驱动**: 将ojdbc驱动jar包添加到项目的`lib`目录或Maven的`pom.xml`中作为依赖。 2. **配置数据源**: 在`application.properties`中配置Oracle数据库的连接信息,如`spring.datasource.url`、`spring...
- 外部化配置,通过环境变量或配置中心如Spring Cloud Config。 9. **部署与运行** - 打包为可执行JAR或WAR,实现单体应用的部署。 - 使用Docker容器化部署,提高部署的灵活性。 10. **微服务** - 结合Spring ...
9. **Spring Cloud整合**:虽然不是Spring Boot自带的功能,但Spring Boot与Spring Cloud结合,可以轻松构建分布式系统,如服务发现(Eureka)、配置中心(Config Server)、负载均衡(Ribbon)等。 10. **测试支持...
9. **Spring Cloud**:Spring Boot与Spring Cloud结合,可以方便地构建分布式系统,如服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、配置中心(Config Server)等。 10. **测试支持**:Spring Boot...
在Spring Boot应用开发中,有时候我们需要将多个独立的Spring Boot项目合并到一个单一的jar包中,以便于管理和部署。这个过程通常被称为多项目打包。本文将深入探讨如何实现Spring Boot多项目打包,并提供相关源代码...
它使用特定的方式来进行配置(properties 或 yml 文件),创建独立的 Spring 引用程序 main 方法运行,并嵌入 Tomcat,无需部署 war 文件。 2. 什么是 JavaConfig? JavaConfig 是 Spring 社区的产品,提供了配置 ...