这里只记了学习以下博客后,自己做的一个总结。
来源:http://blog.csdn.net/fengchao2016/article/details/72726101
profiles定义了一些不同类型的变量,在这些变量中处于激活状态的才会被真正使用,填充到resources指定的文件中的${},或者filter中书写的路径的${} 里去。
filters定义了一些过滤规则,就是一些文件路径,其下的filter写什么那么就保留什么,剩余的就会被忽视
resources定义了一些目录,也就是被过滤的目录
以上三者共同定义了那些文件需要发布到编译目标目录下,以及文件中的${}的内容应该替换成什么
其它参考:http://jjhpeopl.iteye.com/blog/2325375
最后奉上一个自己做的测试maven pom的项目,pom里面加了一些常见的maven plugin,并且有详细注释内容如下:
里面就3个文件:
Main.java
package com.liuyx; import java.util.List; import com.google.common.collect.Lists; public class Main { public Main() { List<String> l = Lists.newArrayList("hello"); for(String s:l) { System.out.println(s); } } }
config.properties
${a}:${b}
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.test.maven</groupId> <artifactId>testMaven</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>17.0</version> </dependency> </dependencies> <profiles> <!-- mvn help:active-profiles 查询当前激活的profile --> <!-- 1、手动激活,直接使用命令指定id mvn package -P test --> <profile> <id>test</id> <properties> <!-- 这两个可以替换config.properties中的内容 --> <a>key-test</a> <b>value-test</b> <config.name>config.properties</config.name><!-- 这个可以替换filter中的内容 --> </properties> <activation> <!-- 设为默认激活,不设置则默认激活的id为dev --> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>byfile</id> <properties> <a>key-file</a> <b>value-file</b> </properties> <activation> <!-- 2、根据文件存在来决定是否激活 --> <file> <exists>config-file.properties</exists> </file> </activation> </profile> <profile> <id>byjdk</id> <properties> <a>key-jdk</a> <b>value-jdk</b> </properties> <activation> <!-- 3、根据jdk环境来决定是否激活 --> <jdk>1.9</jdk> </activation> </profile> <profile> <id>byos</id> <properties> <a>key-os</a> <b>value-os</b> </properties> <activation> <!-- 4、根据操作系统环境来决定是否激活 --> <os> <name>Windows XP</name> <family>Windows</family> <arch>x86</arch> <version>5.1.2600</version> </os> </activation> </profile> </profiles> <build> <!-- 编译后的jar包名称 --> <finalName>one-maven-test</finalName> <filters> <!-- 指定 filter内容,用来过滤resource下的内容 --> <filter>src/main/resources/${config.name}</filter> </filters> <resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <!-- 设为true则用上激活的profile --> <filtering>true</filtering> <includes> <include>**/*.properties</include> </includes> <targetPath>${project.build.directory}/config</targetPath> </resource> </resources> <!-- 几个常用插件,更多插件请自行搜索 maven plugin --> <plugins> <!-- 编译插件,一般用于指定使用的java版本,不过也可以直接在properties中配置 <properties> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 用来复制依赖的jar包到指定目录 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <configuration> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> <outputDirectory> ${project.build.directory}/lib </outputDirectory> </configuration> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> </plugin> <!-- 打成jar包时用来指定MANIFEST.MF文件中的Main class和classpath mainfest等内容 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.3.2</version> <configuration> <archive> <!-- 是否增加maven描述信息 --> <addMavenDescriptor>false</addMavenDescriptor> <!-- 批量处理 --> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.liuyx.Main</mainClass> <!-- Implementation:实现 --> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> <!-- Specification:规格说明书 --> <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> </manifest> <!-- 部分内容无法批量处理,手动添加,这里把.和libs/都添加到了 classpath中 --> <manifestEntries> <Class-Path>.</Class-Path> <Class-Path>libs/</Class-Path> <Permissions>${Permissions}</Permissions> <Caller-Allowable-Codebase>${Caller-Allowable-Codebase}</Caller-Allowable-Codebase> </manifestEntries> </archive> </configuration> </plugin> </plugins> </build> </project>