Maven 打包生成Windows和Liunx启动文件

news2024/12/23 13:18:34

新建一个springboot项目。

1、项目结构

2、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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.14</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>build-project</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>build-project</name>
	<description>Maven项目打包生成启动文件</description>
	<properties>
		<java.version>11</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	
	<build>
		<!-- 打包文件名称-->
		<finalName>${project.artifactId}</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-clean-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
			</plugin>
			<!-- 该插件用于打包时自动生成各个环境的启动文件-->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-antrun-plugin</artifactId>
				<executions>
					<execution>
						<phase>compile</phase>
						<goals>
							<goal>run</goal>
						</goals>
						<configuration>
							<target>
								<echo message="生成 windows 启动文件 begin"/>
								<copy tofile="${basedir}/target/start-${project.artifactId}-dev.bat">
									<fileset file="${basedir}/target/classes/run/start.bat"/>
									<filterset>
										<filter token="active" value="dev"/>
										<filter token="artifactId" value="${project.artifactId}"/>
										<filter token="jar" value="-Dlog.logdir=D:\\logs\\${project.artifactId} ./${project.artifactId}.jar"/>
										<filter token="args" value="-Xmx255m -Xms255m -Xmn125m -Xss256k"/>
									</filterset>
								</copy>
								<copy tofile="${basedir}/target/start-${project.artifactId}-test.bat">
									<fileset file="${basedir}/target/classes/run/start.bat"/>
									<filterset>
										<filter token="active" value="test"/>
										<filter token="artifactId" value="${project.artifactId}"/>
										<filter token="jar" value="-Dlog.logdir=D:\\logs\\${project.artifactId} ./${project.artifactId}.jar"/>
										<filter token="args"
												value="-Xmx255m -Xms255m -Xmn125m -Xss256k"/>
									</filterset>
								</copy>
								<copy tofile="${basedir}/target/start-${project.artifactId}-prod.bat">
									<fileset file="${basedir}/target/classes/run/start.bat"/>
									<filterset>
										<filter token="active" value="prod"/>
										<filter token="artifactId" value="${project.artifactId}"/>
										<filter token="jar" value="-Dlog.logdir=D:\\logs\\${project.artifactId} ./${project.artifactId}.jar"/>
										<filter token="args" value="-Xmx255m -Xms255m -Xmn125m -Xss256k"/>
									</filterset>
								</copy>
								<echo message="生成 windows 启动文件 end"/>
								<echo message="生成 centos 启动文件 begin"/>
								<copy tofile="${basedir}/target/start-${project.artifactId}-dev.sh">
									<fileset file="${basedir}/target/classes/run/start.sh"/>
									<filterset>
										<filter token="active" value="dev"/>
										<filter token="artifactId" value="${project.artifactId}"/>
										<filter token="jar" value="./${project.artifactId}.jar"/>
										<filter token="args" value="-server -Xmx350m -Xms350m -Xmn256m-Xss128k >/dev/null 2>&amp;1 &amp;"/>
									</filterset>
								</copy>
								<copy tofile="${basedir}/target/start-${project.artifactId}-test.sh">
									<fileset file="${basedir}/target/classes/run/start.sh"/>
									<filterset>
										<filter token="active" value="test"/>
										<filter token="artifactId" value="${project.artifactId}"/>
										<filter token="jar" value="./${project.artifactId}.jar"/>
										<filter token="args" value="-server -Xmx350m -Xms350m -Xmn256m-Xss128k >/dev/null 2>&amp;1 &amp;"/>
									</filterset>
								</copy>
								<copy tofile="${basedir}/target/start-${project.artifactId}-prod.sh">
									<fileset file="${basedir}/target/classes/run/start.sh"/>
									<filterset>
										<filter token="active" value="prod"/>
										<filter token="artifactId" value="${project.artifactId}"/>
										<filter token="jar" value="./${project.artifactId}.jar"/>
										<filter token="args" value="-server -Xmx350m -Xms350m -Xmn256m-Xss128k >/dev/null 2>&amp;1 &amp;"/>
									</filterset>
								</copy>
								<copy tofile="${basedir}/target/stop-${project.artifactId}.sh">
									<fileset file="${basedir}/target/classes/run/stop.sh"/>
									<filterset>
										<filter token="artifactId" value="${project.artifactId}"/>
									</filterset>
								</copy>
								<echo message="生成 centos 启动文件 end"/>
								<delete dir="${basedir}/target/classes/run" verbose="true"/>
								<chmod file="${basedir}/target/*.sh" perm="+x"/>
							</target>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

3、拷贝run包模板到resources下

地址:https://download.csdn.net/download/qq_36942720/88180434

4、生产中需要的配置文件:test / prod / dev

application.yml

spring:
  profiles:
    active: test

application-test.yml

server:
  port: 8700

spring:
  application:
    name: build-project

application-prod.yml

server:
  port: 8700

spring:
  application:
    name: build-project

application-dev.yml

server:
  port: 8700

spring:
  application:
    name: build-project

5、执行打包命令,生成启动文件

target目录下生成Liunx和Windows启动文件

【注】:

问题:liunx下启动出现 /bin/bash^M: 坏的解释器: 没有那个文件或目录 错误。

原因:dos / windows 和 unix / linux 换行格式编码问题导致,dos / windows  『\n\r 』表示换行 unix / linux  『\n』 表示换行。

解决办法:重新编译启动文件

sed -i 's/\r$//' start-build-project-test.sh

启动文件:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/841262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASP.NET Core MVC -- 将视图添加到 ASP.NET Core MVC 应用

Index页 右键单击“视图”文件夹&#xff0c;然后单击“添加”>>“新文件夹”&#xff0c;并将文件夹命名为“HelloWorld”。 右键单击“Views/HelloWorld”文件夹&#xff0c;然后单击“添加”>“新项”。 在“添加新项 - MvcMovie”对话框中&#xff1a; 在右上…

Misc取证学习

文章目录 Misc取证学习磁盘取证工具veracryto挂载fat文件DiskGenius 磁盘取证例题[RCTF2019]disk 磁盘[](https://ciphersaw.me/ctf-wiki/misc/disk-memory/introduction/#_2)内存取证工具volatility 内存取证例题数字取证赛题0x01.从内存中获取到用户admin的密码并且破解密码 …

gin和gorm框架安装

理论上只要这两句命令 go get -u gorm.io/gorm go get -u github.com/gin-gonic/gin然而却出现了问题 貌似是代理问题&#xff0c;加上一条命令 go env -w GOPROXYhttps://goproxy.cn,direct 可以成功安装 安装gorm的数据库驱动程序 go get -u gorm.io/driver/mysql

香港人力资源服务商迦里仕人才,申请纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于香港的人力资源服务商迦里仕人才&#xff08;Galaxy Payroll Group&#xff09;近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&am…

VUE框架:vue2转vue3全面细节总结(4)滚动行为

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人_python人工智能视觉&#xff08;opencv&#xff09;从入门到实战,前端,微信小程序-CSDN博客 最新的uniapp毕业设计专栏也放在下方了&#xff1a; https://blog.csdn.net/lbcy…

Redis可视化工具

Redis可视化工具 1、RedisInsight 下载地址&#xff1a;https://redis.com/redis-enterprise/redis-insight/ 双击软件进行安装&#xff0c;安装完后弹出如下界面&#xff1a; 安装完成后在主界面选择添加Redis数据库&#xff1b; 选择手动添加数据库&#xff0c;输入Redis…

GD32F103VE独立看门狗

GD32F103VE独立看门狗 看门狗定时器(WDGT)有两个&#xff1a; 1&#xff0c;独立看门狗定时器(FWDGT) 2&#xff0c;窗口看门狗定时器(WWDGT) 独立看门狗定时器(FWDGT)有一个独立的时钟源(IRC40K). 独立看门狗定时器有一个向下计数器,当计数器到达0&#xff0c;会让CPU复位。…

二叉树的前序遍历、中序遍历、后序遍历、层次遍历的实现

DLR–前序遍历&#xff08;根在前&#xff0c;从左往右&#xff0c;一棵树的根永远在左子树前面&#xff0c;左子树又永远在右子树前面 &#xff09; LDR–中序遍历&#xff08;根在中&#xff0c;从左往右&#xff0c;一棵树的左子树永远在根前面&#xff0c;根永远在右子树前…

从0到1开发go-tcp框架【4实战片— — 开发MMO之玩家聊天篇】

从0到1开发go-tcp框架【实战片— — 开发MMO】 MMO&#xff08;MassiveMultiplayerOnlineGame&#xff09;&#xff1a;大型多人在线游戏&#xff08;多人在线网游&#xff09; 1 AOI兴趣点的算法 游戏中的坐标模型&#xff1a; 场景相关数值计算 ● 场景大小&#xff1a; 250…

Vue2:组件基础(下)

Vue2&#xff1a;组件基础&#xff08;下&#xff09; Date: April 12, 2023 Sum: props验证、计算属性、自定义时间、组件上的v-model、任务列表案例 Tags: * 目标&#xff1a; 能够知道如何对 props 进行验证 能够知道如何使用计算属性 令能够知道如何为组件自定义事件 …

K8S系列文章 之 容器网络基础 Docker0

什么是Docker0 使用ip addr命令看一下网卡&#xff1a; rootKitDevVps:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host…

火车头标题伪原创【php源码】

大家好&#xff0c;给大家分享一下python怎么读取文件中的数据&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 火车头采集ai伪原创插件截图&#xff1a; python是一门非常火爆且相对易学的编程语言&#xff0c;应用在各种场景。许多人想学…

VS code:Task

Task 微软官方连接&#xff1a; https://code.visualstudio.com/docs/editor/tasks what is Task 我们知道&#xff0c;vscode可以支持许多编程语言&#xff0c;很多语言是需要进行编译的&#xff0c;打包&#xff0c;测试… 有许多已有的工具支持这些流程&#xff0c;例如A…

Nginx(1)

目录 1.Nginx概述2.Nginx的特点3.Nginx主要功能1.反向代理2.负载均衡 1.Nginx概述 Nginx (engine x) 是一个自由的、开源的、高性能的HTTP服务器和反向代理服务器&#xff0c;也是一个IMAP、POP3、SMTP代理服务器。 Nginx是一个强大的web服务器软件&#xff0c;用于处理高并发…

【windows】windows上如何使用linux命令?

前言 windows上的bat命令感觉不方便&#xff0c;想在windows上使用linux命令。 有人提供了轮子&#xff0c;本文简单介绍一些该轮子的安装与使用&#xff0c;希望能够帮助到和我有一起需求的网友。 我的答案是busybox。 1.安装busybox.exe 在这个网站上安装busybox busyb…

---------------- 部署 Zookeeper 集群 ----------------

部署 Zookeeper 集群 1.安装前准备2.安装 Zookeeper修改配置文件在每个节点上创建数据目录和日志目录在每个节点的dataDir指定的目录下创建一个 myid 的文件配置 Zookeeper 启动脚本 //准备 3 台服务器做 Zookeeper 集群 192.168.109.1 192.168.109.2 192.168.109.3 1.安装前准…

前端学习---vue2--选项/数据--data-computed-watch-methods-props

写在前面&#xff1a; vue提供了很多数据相关的。 文章目录 data 动态绑定介绍使用使用数据 computed 计算属性介绍基础使用计算属性缓存 vs 方法完整使用 watch 监听属性介绍使用 methodspropspropsData data 动态绑定 介绍 简单的说就是进行双向绑定的区域。 vue实例的数…

Abaqus 中最常用的子程序有哪些 硕迪科技

在ABAQUS中&#xff0c;用户定义的子程序是一种重要的构件&#xff0c;可以将其插入到Abaqus分析中以增强该软件的功能和灵活性。这些子程序允许用户在分析过程中添加自定义材料模型、边界条件、初始化、加载等特定操作&#xff0c;以便更精准地模拟分析中的现象和现象。ABAQUS…

AirPods 充电接触不良问题修复

AirPods 充电接触不良问题修复 问题现象 从充电盒拿出耳机&#xff0c;一只耳机电量不满甚至完全没有电放入充电盒不充电&#xff0c;指示灯是绿色而非橙色多次尝试耳机能充电&#xff0c;但是合上盖子就无法充电 如果你的耳机出现上述症状&#xff0c;基本就是耳机充电接触…

一篇万能英语作文范文怎么写?聪明灵犀英语作文写作工具分享

一篇万能英语作文范文怎么写&#xff1f;英语作文是英语学习中不可或缺的一环&#xff0c;但是对于很多人来说&#xff0c;写作并不是一件容易的事情。本文将分享一些实用的英语作文写作工具&#xff0c;帮助你更好地写作。 1. 明确主题 写作之前&#xff0c;首先需要明确主题…