利用maven-war-plugin实现不同环境下的配置文件

我这是一个标准的maven的目录结构,配置文件都在src/main/resources根目录下。因为要改成多环境的配置,所以只有properties的文件改变了(公共配置可以原地不动)

1.将配置文件放到不同的文件夹下

2.创建2个不同的profile,一个是生产环境配置(prod),一个是开发环境配置(dev),分别与步骤1中的两个文件夹名对应一致

<profiles>
	<!-- 不同环境的配置代码 -->
	<profile>
		<id>dev</id>
		<properties>
			<package.environment>dev</package.environment>
		</properties>
		<activation>
			<activeByDefault>true</activeByDefault>
		</activation>
	</profile>
	<profile>
		<id>prod</id>
		<properties>
			<package.environment>prod</package.environment>
		</properties>
	</profile>
</profiles>

3.设置变量

<package.environment>dev</package.environment>

4.对resources下的目录进行处理

<resources>
	<resource>
		<directory>src/main/resources</directory>
		<filtering>false</filtering>
		<excludes>
			<exclude>prod/*</exclude>
			<exclude>dev/*</exclude>
		</excludes>
	</resource>
</resources>

上面那个filtering,之前看别人的示例是true。发现这样的话,springContext.xml中类似{url}、{filters}(druid连接池的属性,本来用prod/jdbc.properties和dev/jdbc.properties的配置)就变成了pom.xml中url的属性值了(替换成了http://maven.apache.org

5. maven-war-plugin的配置

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-war-plugin</artifactId>
	<version>2.3</version>
	<configuration>
		<archive>
			<addMavenDescriptor>false</addMavenDescriptor>
		</archive>
		<warName>${project.artifactId}</warName>
		<webResources>
			<resource>
				<directory>src/main/resources/${package.environment}</directory>
				<targetPath>WEB-INF/classes</targetPath>
				<filtering>true</filtering>
			</resource>
		</webResources>
	</configuration>
</plugin>

上面的${project.artifactId}是pom.xml的内置属性,${package.environment}是定义的属性

6.打包

打包之前别忘了update下project,因为pom.xml已经被修改过了

选择项目路径,填好打包命令(我是用的eclipse,所以省略了mvn的字样)

package -P dev 就是用开发环境的配置,package -P prod就是用生产环境的配置

打包成功后,看包结构,虽然也有dev/prod两个文件,但在src/main/resources根目录下已经生成了那三个配置文件,而我web.xml也只是加载了 src/main/resources根目录的配置文件,所以dev和prod对项目本身没有冲突

 

 

=================================================================

但是这样的话,eclipse在本地调试的话,没法用tomcat启动,所以改成用maven的tomcat来进行启动

(tomcat7的命令是 tomcat7:run)

1.配置maven的tomcat插件

<plugin>
	<groupId>org.apache.tomcat.maven</groupId>
	<artifactId>tomcat7-maven-plugin</artifactId>
	<version>2.2</version>
	<configuration>
		<port>80</port>
		<path>/fitness</path>
		<uriEncoding>UTF-8</uriEncoding>
		<server>tomcat7</server>
	</configuration>
</plugin>

上面我用到了80的端口,用的tomcat7

2.在依赖中不能添加tomcat的依赖包

3.对javax.servlet-api和javaee-api的scope要加限制,限制成provided

如下:

这样通过命令就能启动了

参考:https://blog.csdn.net/chenjing928/article/details/79883104

posted @ 2019-12-13 08:35  半湖思絮  阅读(1531)  评论(0编辑  收藏  举报