maven profiles、filters、resources学习笔记 及 常用 plugin demo

这里只记了学习以下博客后,自己做的一个总结。

来源: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>
原文地址:https://www.cnblogs.com/flying607/p/7518478.html