(转载)springMvc 或spring boot 项目中 maven maven-war-plugin插件 和 profile 的综合使用列子

1、例子1

1.1、在项目中定义了 dev、test、production 三个不同环境 配置目录

注意:这是目录,不是单个配置文件。
每个目录下面有多个配置文件。如图所示:

在这里插入图片描述

此为 dev 目录下有多个配置文件,test、production的配置文件与此类似。
在这里插入图片描述

1.2、pom.xml :

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">

	<modelVersion>4.0.0</modelVersion>
	<groupId>com.eastone</groupId>
	<artifactId>user-serverapi</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>user-serverapi</name>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<package.environment>dev</package.environment>
		<spring.version>4.1.6.RELEASE</spring.version>
	</properties>

	<!-- profile 定义了 dev、test、production 三个不同环境配置 -->
	<profiles>
		<profile>
			<id>dev</id>
			<properties>
				<package.environment>dev</package.environment>
			</properties>
		</profile>
		<profile>
			<id>test</id>
			<properties>
				<package.environment>test</package.environment>
			</properties>
		</profile>
		<profile>
			<id>production</id>
			<properties>
				<package.environment>production</package.environment>
			</properties>
		</profile>
	</profiles>

	<dependencies>		
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.2</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<finalName>serverapi</finalName>
		
		<!-- org.eclipse.m2e 插件 -->
		<pluginManagement>		
			<plugins>
				<plugin>
					<groupId>org.eclipse.m2e</groupId>
					<artifactId>lifecycle-mapping</artifactId>
					<version>1.0.0</version>
					<configuration>
						<lifecycleMappingMetadata>
							<pluginExecutions>

								<pluginExecution>
								
									<pluginExecutionFilter>
										<groupId>org.codehaus.mojo</groupId>
										<artifactId>native2ascii-maven-plugin</artifactId>
										<versionRange>[1.0-beta-1,)</versionRange>
										<goals>
											<goal>native2ascii</goal>
										</goals>
									</pluginExecutionFilter>
									
									<action>
										<ignore />
									</action>
								</pluginExecution>

							</pluginExecutions>
						</lifecycleMappingMetadata>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>


		<plugins>
		
			<!-- maven-compiler-plugin   编译插件 -->
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<encoding>utf8</encoding>
				</configuration>
			</plugin>

			<!-- maven-dependency-plugin   依赖插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<executions>
					<execution>
						<id>install</id>
						<phase>install</phase>
						<goals>
							<goal>sources</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

			<!-- maven-war-plugin   打包插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.4</version>
				<configuration>
					<warName>serverapi</warName>
					<failOnMissingWebXml>false</failOnMissingWebXml>
					
					<!-- packagingExcludes   排除(删除)的目录和文件 -->
					<packagingExcludes>**/environment/**,**/db/**,**/db-assembly.xml</packagingExcludes>
					<archive>
						<addMavenDescriptor>false</addMavenDescriptor>
						<manifest>
							<addClasspath>true</addClasspath>
							<classpathPrefix>lib/</classpathPrefix>
						</manifest>
					</archive>
					
					<webResources>
						<resource>
							<directory>src/main/spring-conf</directory>
							<targetPath>WEB-INF/classes</targetPath>
						</resource>
						
						<resource>
							<!--${package.environment} 与 <package.environment>dev</package.environment>对应, 指定了使用哪个环境的配置文件   -->
							<directory>src/main/resources/environment/${package.environment}</directory>
							<targetPath>WEB-INF/classes</targetPath>
						</resource>
					</webResources>
					
				</configuration>
			</plugin>

		</plugins>
	</build>
</project>

1.3、pom.xml 配置文件解读:

1、<profiles> 中 定义多个dev、test、production 三个不同环境
2、<package.environment> 中指定使用哪个环境配置,如 dev
3、${package.environment} 使用了 <package.environment> 中指定的值 dev 。
(感觉第1步定义的 <profiles> 其实没有实际用处 )

2、例子2

项目src/main/resources目录下建立相对应的目录。
dev,test,pro分别表示开发环境,测试环境,生产环境。针对不同的环境,配置内容会有不同。

在这里插入图片描述

<profiles>

	<profile>
		<id>dev</id>
		<properties>
			<profiles.active>dev</profiles.active>
		</properties>
		<!--本地开发环境 -->
		<activation>
			<activeByDefault>true</activeByDefault>
		</activation>
	</profile>
	
	<profile>
		<id>test</id>
		<properties>
			<profiles.active>test</profiles.active>
		</properties>
	</profile>
	
	<profile>
		<id>pro</id>
		<properties>
			<profiles.active>pro</profiles.active>
		</properties>
	</profile>
</profiles>


<!--build部分 -->
<build>
	<finalName>xxx</finalName>
	<sourceDirectory>src/main/java</sourceDirectory>
	<testSourceDirectory>src/test/java</testSourceDirectory>
	<resources>
	
		<!--  directory  指定引入的资源目录,excludes排除不必要的文件和目录  -->
		<resource>			
			<directory>${project.basedir}/src/main/resources</directory>
			<excludes>
				<exclude>dbpool/**</exclude>
				<exclude>dev/*</exclude>
				<exclude>mbg/*</exclude>
				<exclude>pro/*</exclude>
				<exclude>test/*</exclude>
				<exclude>readme.txt</exclude>
			</excludes>
		</resource>
		
		<resource>
			<directory>${project.basedir}/src/main/resources/${profiles.active}</directory>
			<!--  filtering 标签一定要有,他的作用就是把 src/main/resources 的文件替换为 dev|test|pro 下的文件 -->
			<filtering>true</filtering>
		</resource>
		
		<resource>
			<directory>${project.basedir}/src/main/java</directory>
			<filtering>true</filtering>
			<includes>
				<include>**/*.xml</include>
			</includes>		
		</resource>
		
	</resources>
</build>

3~26行:我们设置了三个 profile 分别对应目录中的三个开发环境。

8~10行:开发环境是默认激活的( activeByDefault 为 true ),这样如果在不指定profile时默认是开发环境。

34~44行:<directory> 指定引入的资源目录,<excludes> 排除不必要的文件和目录 。

45~48行:根据当前激活的 profile 来把指定的配置文件加载到 classpath 下。
桥黑板<filtering> 标签一定要有,它的作用就是把 src/main/resources 的文件替换为 dev|test|pro下的文件。(47行)

猜你喜欢

转载自blog.csdn.net/xiaojin21cen/article/details/85918456