maven 不同环境打包
很多时候,项目会分为,本地环境(local),测试环境(dev),生产环境(product),此时给项目打包,就会很麻烦,因为配置文件不同比如数据库链接,文件地址等,所以打包的时候需要修改配置文件,maven这里提供了很便利的操作,通过配置文件和命令就可以分别打出来不同的war包,在不同的环境中使用;
一、项目中resource下面需要区分一下,如下图,在resource中新建 dev local pro 文件夹,名字也可以自己根据自己习惯命名。
建立好目录后,可以把一些不同环境的配置各自放入到响应的文件夹,我的这个项目不同的配置有好几个,所以我在文件夹下面又分了子文件件,我的不同配置分为 数据库链接配置,还有web.xml 还有自己系统初始化的一些配置。
二、配置pom文件
pom文件里面添加 如下配置,和上面resource里面的配置相对应
<profiles> <profile> <id>local</id><!--本地环境--> <properties> <package.environment>local/config</package.environment> <webxml.environment>local/webxml</webxml.environment> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>pro</id><!--生产环境--> <properties> <package.environment>pro/config</package.environment> <webxml.environment>pro/webxml</webxml.environment> </properties> </profile> <profile> <id>dev</id><!--测试环境--> <properties> <package.environment>dev/config</package.environment> <webxml.environment>dev/webxml</webxml.environment> </properties> </profile> </profiles>
编译时候添加如下配置,保证项目正常启动
<build> <finalName>csp</finalName> <resources> <resource> <directory>${basedir}/src/main/resources</directory> <!-- 资源根目录排除各环境的配置,防止在生成目录中多余其它目录 *一级目录 **包含子目录 --> <excludes> <exclude>local/**</exclude> <exclude>pro/**</exclude> <exclude>dev/**</exclude> </excludes> <filtering>true</filtering> </resource> <resource> <directory>${basedir}/src/main/resources/${package.environment}</directory> <filtering>true</filtering> </resource> <resource> <directory>${basedir}/src/main/resources/${webxml.environment}</directory> <filtering>true</filtering> </resource> </resources> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <!-- war打包插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> <configuration> <webResources> <!--动态指定文件--> <resource> <directory>src/main/resources/${package.environment}</directory> <targetPath>WEB-INF/classes</targetPath> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources/${webxml.environment}</directory> <targetPath>WEB-INF</targetPath> <filtering>true</filtering> </resource> </webResources> <packagingExcludes> WEB-INF/classes/dev/**,WEB-INF/classes/pro/**,WEB-INF/classes/local/**, WEB-INF/classes/webxml/** </packagingExcludes> </configuration> </plugin> </plugins> </pluginManagement> </build>
在上面的配置中,
resources配置保证项目可以本地编译,支持本地debug,
其中 excludes标签是用来排除重复的内容,需要注意的是 * 代表一级目录 **代表包含子目录;
configuration标签设置打包的一些配置,其中:
directory:定义了要进行打包的文件路径,
targetPath: 打包的目录文件夹,即将文件打成war包的时候放到war包的此目录下
filtering:在打包的时候是否将配置文件中的用${}表示的值给替换。
packagingExcludes是在生成war包时不包含指定文件或文件夹到war文件中,不论它们是否存在于war文件夹下。
这样就实现了不同环境的部署,方便项目上线测试;