【插件增强】maven项目实现一键打包、自动化打包、分不同环境打不同配置项目包

这是一个用来区分配置资源的描述文件,不参与配置项!

环境: 开发默认!开发默认!开发默认!(这一句不重要,但你可以将这篇文章写在你的资源目录用作标识,方便其他人查阅

      在我们的项目中,有的时候会根据不同的环境需要修改不同的配置文件,最原始的做法就是在配置文件中一个一个注释掉不需要的配置,然后通过maven插件mvn install一下,在多次实践过程中,这样做其实效率并不高,也不好管理,容易导致一大堆的配置文件内容冗余,再接收项目的人更是一团乱麻,交接变得复杂。经过作者自己修改后,只需要选择即可完成一键打包的任务,这样大大的提高了开发效率,不用为打包改配置而头大。

实现自动化分不同环境打包,效果图:
【插件增强】maven项目实现一键打包、自动化打包、分不同环境打不同配置项目包

一、配置教程:

1、 添加src/main/filters目录,子目录结构如下:

----filters				(资源根目录)
	----dev				(开发环境)
	----pro				(生产环境)
	----pro1			(生产1环境)
	----test			(测试环境)
	----testnw			(测试内网环境)
	----testww			(测试外网环境)

资源目录结构如下图:
【插件增强】maven项目实现一键打包、自动化打包、分不同环境打不同配置项目包
注意: 如果这里的文件名称与src/main/resources文件夹有重名,打包时会默认将文件夹中的配置文件覆盖到项目中

2、 pom.xml配置如下内容:

<project>

	<!-- 打包多环境配置 -->
	<profiles>
		<profile>
           	<!-- 开发 -->
            <id>dev</id><!-- 名称可以随意(建议id对应filters目录下相应文件夹名称) -->
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
            	<!-- 对应filters目录下相应文件夹名称 -->
                <env>dev</env>
            </properties>
        </profile>
		<profile>
            <!-- 测试 -->
            <id>test</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <env>test</env>
            </properties>
        </profile>
		<profile>
            <!-- 测试-多版本-内网 -->
            <id>testnw</id>
            <activation>
            	<!-- 是否默认开启 -->
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <env>testnw</env>
            </properties>
        </profile>
		<profile>
            <!-- 测试-多版本-外网 -->
            <id>testww</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <env>testww</env>
            </properties>
        </profile>
		<profile>
            <!-- 生产 -->
            <id>pro</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <env>pro</env>
            </properties>
        </profile>
		<profile>
            <!-- 生产-多版本-1 -->
            <id>pro1</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <env>pro1</env>
            </properties>
        </profile>
	</profiles>

</project>

3、 在assembly.xml中添加如下配置(非assembly插件打包请跳至第四步,省略标签自动对应):

<assembly>
	<fileSets>
		<!-- 多环境配置 -->
		<fileSet>
			<!-- 读取配置多环境对应的配置文件 -->
			<directory>src/main/filters/${env}/</directory>
			<!-- 向conf目录输出 -->
			<outputDirectory>conf</outputDirectory>
		</fileSet>
	</fileSets>
</assembly>

4、 普通打包在pom.xml中添加(assembly插件打包请看第三步,省略标签自动对应):

<build>
	<resources>
		<resource>
			<!-- ${env}配置在:profiles → profile → properties → env 中,这里自动获取maven打包的命令参数 -->
			<directory>${basedir}/src/main/filters/${env}</directory>	<!-- 打包时包含src/main/filters/${env}目录下所有  "子"  文件 和  "孙"  文件,如dev、test、pro目录 -->
			<!-- 这里请不要删除,可以排除掉不需要的文件,避免后来的人不懂 -->
			<!-- <excludes>
				<exclude>${env}/mapper/*</exclude>			打包时排除src/main/filters/${env}/mapper下所有  "子"  文件 和  "孙"  文件
				<exclude>${env}/test/*</exclude>			打包时排除src/main/filters/${env}/test下所有  "子"  文件 和  "孙"  文件
				<exclude>${env}/preview/*</exclude>			打包时排除src/main/filters/${env}/preview下所有  "子"  文件 和  "孙"  文件
                <exclude>${env}/production/**</exclude>		打包时排除src/main/filters/${env}/production下所有  "子"  文件 和  "孙"  文件
																  注意点: 如果写一个心号*, 如<exclude>src/main/filters/${env}/*</exclude> 则表示:
																  打包时排除src/main/filters/${env}下所有  "子"  文件, 不排除 "孙"  文件, 如上一个截图所示。
																  以上配置优先度从上到下 递增, 这就达到目的: config目录下的配置各环境都需要, 而其它环境相关的配置只会有一个目录被打包-
			</excludes> -->
		</resource>
		<resource>
			<directory>src/main/resources/</directory>		<!-- 打包时包含src/main/filters/${env}下所有  "子"  文件,environment变量值来自profile中赋值 -->
			<targetPath></targetPath>						<!-- 指定src/main/filters/${env}/所有"子文件" 打包 到包的哪个目录,空即为:根目录 -->
		</resource>
	</resources>
</build>

5、 maven打包命令:
1)、cmd命令窗口打包: cmd进入项目目录 → 输入命令:mvn clean -P dev install
2)、eclipse打包: 选中项目右键Run AsMaven build → Goals输入:clean -P dev install
3)、注: 选这里 -P 后面的 dev代表pom.xml文件对应profile标签里的id内容

二、快捷打包设置:

1、Maven项目一键打包工具,build.bat文件内容前提是运行bat文件的计算机已安装maven插件

cd /d %~dp0
@echo off
@title 【Maven项目一键打包工具】-【作者,百度搜索:seesun2012】
set str=欢迎使用【Maven项目一键打包工具】-【作者,百度搜索:seesun2012】
setlocal enabledelayedexpansion
set col=CAD9B
for /f "tokens=1-4" %%1 in ("%str%") do (echo.
	for %%m in (%%1 %%2 %%3 %%4) do (set s=%%m
		for /l %%a in (0,1,39) do (
			call set b=0%%col:~!x!,1%%
			set /a x+=1&if !x!==5 (set x=0)
			set c=!s:~%%a,1!
			set/p= <nul>!c!
			findstr /a:!b! .* "!c!*"
			del !c!
			ping /n 1 /w 127.1>nul
		)
		echo.&echo.
	)
)
@set JAVA_TOOL_OPTIONS=-Dfile.encoding=GBK
@echo 选择工程将要运行的环境,输入序号后按回车键结束:
@echo.
@echo #######################################################################
@echo ##               1. 开发环境-默认                                    ##
@echo ##          	 2. 测试环境-默认                                    ##
@echo ##          	 3. 测试环境-内网                                    ##
@echo ##               4. 测试环境-外网                                    ##
@echo ##               5. 生产环境-默认                                    ##
@echo ##               6. 生产环境-生产1                                   ##
@echo #######################################################################
@echo.

@set env=""

:input
@set /p input=请输入上面的序号开始打包:
@if %input%==1 (
	@set env=dev
) else if %input%==2 (
	@set env=test
) else if %input%==3 (
	@set env=testnw
) else if %input%==4 (
	@set env=testww
)else if %input%==5 (
	@set env=pro
)else if %input%==6 (
	@set env=pro1
) else (
	@echo 非法的输入!请重试!
	@echo.
	goto input
)

:: 此处需要设置或修改MAVEN_OPTS,否则在执行mvn install命令时可能会出现OutOfMemoryError错误
:: 等号后面不能加引号
@set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=128m


@call mvn clean install -Dmaven.test.skip=true -P=%env% -Denv=%env% -e -U
@popd

@echo.
@if %ERRORLEVEL%==0 (
	@echo 工程构建完毕!
) else (
	@echo 工程构建失败!
)

@echo.
@echo 按任意键退出…… & pause>nul

以上内容为作者原创,如有适用到项目中去,若无法更改bat彩色字体请联系本人!








持续更新中…

如有对思路不清晰或有更好的解决思路,欢迎与本人交流,QQ群:273557553,个人微信:seesun2012

你的提问是小编创作灵感的来源!