通常情况下,maven打包结果为jar或war包。 如果需要一并打包配置文件等参数,通过resources配置指定需要打包的文件参数,如下示例:
1 <project>
2 ...
3 <!-- 定义环境 -->
4 <profiles>
5 <!-- 开发环境 -->
6 <profile>
7 <id>dev</id>
8 <properties>
9 <!-- 定义profileActive属性 -->
10 <profileActive>dev</profileActive>
11 </properties>
12 <activation>
13 <activeByDefault>true</activeByDefault>
14 </activation>
15 </profile>
16
17 <!-- 测试环境 -->
18 <profile>
19 <id>test</id>
20 <properties>
21 <profileActive>test</profileActive>
22 </properties>
23 </profile>
24
25 <!-- 生产环境 -->
26 <profile>
27 <id>prod</id>
28 <properties>
29 <profileActive>prod</profileActive>
30 </properties>
31 </profile>
32 </profiles>
33
34 <build>
35 ...
36 <!-- 资源配置 -->
37 <resources>
38 <resource>
39 <directory>src/main/resources</directory>
40 <filtering>true</filtering>
41 <excludes>
42 <exclude>xxx-dev.yml</exclude>
43 <exclude>xxx-test.yml</exclude>
44 <exclude>xxx-prod.yml</exclude>
45 </excludes>
46 </resource>
47 <resource>
48 <directory>src/main/resources</directory>
49 <filtering>true</filtering>
50 <includes>
51 <include>xxx-${profileActive}.yml</include>
52 </includes>
53 </resource>
54 </resources>
55 ...
56 </build>
57 </project>
注:通过resources配置打包的文件是一并打包到jar包或war包中的(位于classpath路径下)。
而在生产环境部署项目时,却需要动态修改数据库配置等参数,此时如果仅仅打一个war进行部署,对于配置文件修改非常不方便。 那这里就提出2个问题: 第一,J2EE项目是否可以支持配置文件在war包之外? 第二,如何通过maven将项目文件进行统一打包压缩?
Q1: 在J2EE项目中使用Spring框架时,可以将配置文件写在properties文件中,从外部加载相应配置参数。示例如下:
web.xml添加配置文件路径参数:
<context-param>
<param-name>confDir</param-name>
<param-value>file:${catalina.home}/conf</param-value><!--将配置文件放到tomcat目录下-->
<!-- <param-value>classpath:</param-value> --><!--将配置文件放在项目classpath路径下-->
</context-param>
spring加载配置文件:( 详见:https://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/ 之7.8 Container Extension Points)
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>${confDir}/jdbc.properties</value>
</list>
</property>
<property name="fileEncoding" value="utf-8"/>
</bean>
spring数据源配置:
1 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
2 <property name="driverClass" value="${driverClass}" />
3 <property name="jdbcUrl" value="${jdbcUrl}" />
4 <property name="user" value="${user}" />
5 <property name="password" value="${password}" />
6 <property name="initialPoolSize" value="${initialPoolSize}" />
7 <property name="minPoolSize" value="${minPoolSize}" />
8 <property name="maxPoolSize" value="${maxPoolSize}" />
9 <property name="breakAfterAcquireFailure" value="${breakAfterAcquireFailure}" />
10 <property name="idleConnectionTestPeriod" value="${idleConnectionTestPeriod}" />
11 <property name="acquireRetryAttempts" value="${acquireRetryAttempts}" />
12 <property name="acquireIncrement" value="${acquireIncrement}" />
13 <property name="acquireRetryDelay" value="${acquireRetryDelay}" />
14 <property name="testConnectionOnCheckout" value="${testConnectionOnCheckout}" />
15 <property name="testConnectionOnCheckin" value="${testConnectionOnCheckin}" />
16 </bean>
Q2: 通过maven插件maven-assembly-plugin将项目文件进行统一压缩打包,更专业,详见:http://maven.apache.org/plugins/maven-assembly-plugin/ 。 使用该插件时需要单独定义一个打包规则文件,如:assembly.xml,在该文件中定义一系列需要打包的文件参数。
pom.xml:
1 <build>
2 <plugins>
3 <!-- 部署打包: 通过maven-assembly插件压缩为tar包进行发布 -->
4 <plugin>
5 <artifactId>maven-assembly-plugin</artifactId>
6 <configuration>
7 <!-- not append assembly id in release file name -->
8 <appendAssemblyId>false</appendAssemblyId>
9 <descriptors>
10 <descriptor>assembly.xml</descriptor>
11 </descriptors>
12 <finalName>xxx-${project.version}</finalName>
13 <!-- 定义压缩包存放位置 -->
14 <outputDirectory>${basedir}/release</outputDirectory>
15 </configuration>
16 <executions>
17 <execution>
18 <id>make-assembly</id>
19 <phase>verify</phase>
20 <goals>
21 <goal>single</goal>
22 </goals>
23 </execution>
24 </executions>
25 </plugin>
26 </plugins>
27 </build>
assembly.xml:
1 <assembly
2 xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
5 <id>distribution</id>
6 <formats>
7 <format>tar</format>
8 </formats>
9 <fileSets>
10 <!-- 打包配置文件 -->
11 <fileSet>
12 <directory>src/main/resources</directory>
13 <outputDirectory>/conf</outputDirectory>
14 <includes>
15 <include>jdbc.properties</include>
16 </includes>
17 </fileSet>
18 <!-- 打包sql文件 -->
19 <fileSet>
20 <directory>${basedir}</directory>
21 <outputDirectory>/sql</outputDirectory>
22 <includes>
23 <include>*.sql</include>
24 </includes>
25 </fileSet>
26 <!-- 打包INSTALL,change.log -->
27 <fileSet>
28 <directory>${basedir}</directory>
29 <outputDirectory>/</outputDirectory>
30 <includes>
31 <include>INSTALL</include>
32 <include>change.log</include>
33 </includes>
34 </fileSet>
35 <!-- 打包war文件 -->
36 <fileSet>
37 <directory>${project.build.directory}</directory>
38 <outputDirectory>/</outputDirectory>
39 <includes>
40 <include>*.war</include>
41 </includes>
42 </fileSet>
43 </fileSets>
44 <!-- 定义压缩包根目录名称 -->
45 <baseDirectory>xxx-${project.version}</baseDirectory>
46 </assembly>