maven如何打包动态环境变量(包括启动脚本)
作者:__WanG 发布时间:2023-07-16 03:48:56
maven 打包 动态启动脚本
介绍如何通过maven的环境变量动态打包, 并动态改变启动脚本中的环境参数
之前都是每个环境一个启动脚本, 其实启动脚本基本都一样, 只是启动的时候的环境变量不一样, 随着环境越来越多, 这样一个环境一个启动脚本的方式太不优雅了, 每次加环境都得加一份启动脚本, jenkins配置, alibaba cloud开发插件配置每次都得微调一下, 于是寻找是否有可以动态改变脚本内容的方式
前提
maven 打包, 配合 assembly 脚本
maven环境变量(知道这个是怎么回事的直接跳过这部分即可)
设置
在 pom.xml 文件中加入如下的配置
<profiles>
<profile>
<!-- 开发环境 -->
<id>dev</id>
<properties>
<package.environment>dev</package.environment>
</properties>
</profile>
<profiles>
package.environment
: 这个是变量名(你可以直接叫env等等, 随意)dev
: 中间这个 dev 就是环境变量的值(和你的环境配置文件, 配置地址等一致即可)
使用
maven 打包命令加上 -P dev 标识打 dev 环境的包
assembly 配置
在配置脚本中加入如下
<fileSet>
<directory>${project.build.scriptSourceDirectory}</directory>
<outputDirectory></outputDirectory>
<fileMode>0755</fileMode>
<filtered>true</filtered>
<includes>
<include>startup.sh</include>
</includes>
</fileSet>
directory
: 文件地址(打包的时候去哪里复制这些文件outputDirectory
: 输出到哪里(我这里是默认位置)fileMode
: 文件权限设置filtered
: 这个为true则表示启用动态变量
启动脚本如何写
本文环境变量的key为package.environment
–spring.profiles.active 后面的环境参数就能根据maven打包命令动态变更了(maven 命令 -P 后面跟的参数)
如下:
nohup java -jar your.jar --spring.profiles.active=${package.environment} -server -Xms512m -Xmx1024m -Xss256k
maven常用打包命令
1、mvn compile 编译,将Java 源程序编译成 class 字节码文件。
2、mvn test 测试,并生成测试报告
3、mvn clean 将以前编译得到的旧的 class 字节码文件删除
4、mvn pakage 打包,动态 web工程打 war包,Java工程打 jar 包。
5、mvn install 将项目生成 jar 包放在仓库中,以便别的模块调用
6、mvn clean install -Dmaven.test.skip=true 打成jar包,并且抛弃测试用例打包
7、mvn clean pakage -Dmaven.test.skip=true 动态 web工程打 war包,Java工程打 jar 包 ,并且抛弃测试用例打包
Maven可以使用mvn package指令对项目进行打包,如果使用java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in xxx.jar"(没有设置Main-Class)、ClassNotFoundException(找不到依赖包)等错误。
要想jar包能直接通过java -jar xxx.jar运行,需要满足:
1、在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的入口在哪里;
2、要能加载到依赖包。
在pom.xml中配置:
<plugin>
<!--用于指定加载的主类-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.zyd.blog.BlogWebApplication</mainClass>
<layout>JAR</layout>
<!--构建完整可执行程序,可以直接运行-->
<executable>true</executable>
</configuration>
</plugin>
来源:https://wangq.blog.csdn.net/article/details/104635452
猜你喜欢
- 在Java移动文件夹及其所有子文件与子文件夹可以有如下的一段简单的方法来说明:public static void moveFolder(S
- SpringMvc中普通类注入Service为null场景:使用Quartz定时器时,普通的java类需要注入spring的service类
- 前置说明:这里的代码演示都是在UserController类里面使用UserService类,然后通过启动类调用UserController
- 1、什么是servlet异步请求Servlet 3.0 之前,一个普通 Servlet 的主要工作流程大致如下:(1)、Servlet 接收
- 一、TimeZone 简介TimeZone 表示时区偏移量,也可以计算夏令时。在操作 Date, Calendar等表示日期/时间的对象时,
- java 网络编程java.net 类 InetAddress 此类表示互联网协议 (IP) 地址。 会抛出异常 UnknownHostEx
- 简介本文用示例介绍使用MyBatis-Plus进行多表查询的方法,包括静态查询和动态查询。代码controllerpackage com.e
- BeanUtils.copyProperties无法封装使用BeanUtils.copyProperties(user, memeber);
- Unsupported major.minor version 51.0解决办法今天偶然间同事遇到一个问题,也加深了自己对eclipse中b
- timer和timertask是jdk自带的定时任务实现,无需导入第三方jar包来完成1、指定多久之后执行此任务,注意:只会执行一次publ
- 栈和队列:都是线性表,都是基于List基础上的实现线性表:数组,链表,字符串,栈,队列元素按照一条“直线&rdq
- 这篇文章主要介绍了SpringBoot跨域Access-Control-Allow-Origin实现解析,文中通过示例代码介绍的非常详细,对
- 最近完成的差不多的项目突然需要加退款的流程需求了,所以来小小的实现以下。其实对比其他的支付和退款来说,支付宝算是特别专业,也是特别简单的一个
- 1. JSCH简介JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你可
- 一个围绕统计分析功能的系统,在最后制作统计分析时需要一个批量点击的功能,用以批量制作echarts图形后生成图片并保存图形和图片。方便后续导
- 本文实例为大家分享了java简单实现斗地主发牌的具体代码,供大家参考,具体内容如下问题:参考斗地主的游戏规则,完成一个发牌的功能(54张牌,
- Result也是Struts2比较重要的一部分,在Result的配置中常用的有四种类型:dispatcher、redirect、chain和
- 场景既然要搞懂Redis分布式锁,那肯定要有一个需要它的场景。高并发售票问题就是一个经典案例。搭建环境准备redis服务,设置redis的键
- 前言有人说Gradle使用groovy语言编写,简单,明了没像maven使用xml臃肿,其实我倒不觉得,我觉得maven挺好的,管理jar依
- java 请求跨域问题解决方法实例详解新建Util类,在Util中添加下面方法: /* * response请求跨域公共设置