Maven-build

概述

build标签描述了如何编译及打包项目,具体的编译和打包工作是通过其中的plugin配置来完成的。当然,plugin不是必须的,默认情况下,Maven会绑定以下几个插件来完成基本操作

life cycle phaseplugin描述
cleanmaven-clean-plugin清理上一次执行创建的目标文件。
resourcesmaven-resources-plugin处理资源文件和测试资源文件。
compilemaven-compiler-plugin编译源文件和测试源文件。
testmaven-surefire-plugin执行测试文件。
jarmaven-jar-plugin创建jar。
installmaven-install-plugin安装jar。
deploymaven-deploy-plugin发布jar。

如果有需要可以另外进行配置,以下配置了编译时使用的jdk版本。

<build>  
    ...  
    <plugins>
       <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
          <configuration>
             <source>1.7</source>
             <target>1.7</target>
          </configuration>
        </plugin>
    </plugins>
    ...  
</build>  

build

标签build包含以下元素:

标签类型描述
sourceDirectoryString指定一个目录包含项目的来源。生成的构建系统将从这个目录编译源代码。默认值是 src/main/java
scriptSourceDirectoryString指定一个目录包含项目的脚本来源。默认值是 src/main/scripts
testSourceDirectoryString指定一个目录包含项目的单元测试源。 默认值是 src/test/java
outputDirectoryString编译应用程序类放置的目录。 默认值是target/classes
testOutputDirectoryString编译测试类放置的目录。 默认值是target/test-classes
extensionsList<extension>用于构建扩展使用
filtersList<String>过滤器属性的列表文件。启用过滤时使用
defaultGoalString默认目标Goal
directoryString生成所有文件的目录。 默认值是target
finalNameString生成最终文件名。默认值是${artifactId}-${version}
resourcesList<resource>描述了类路径的所有资源。默认是src/main/resources
testResourcesList<resource>描述了类路径的所有测试相关的资源。默认是src/test/resources
pluginManagementpluginManagement父项目统一配置的插件列表。这个插件配置不会或绑定到生命周期,除非子模块引用。
pluginsList<plugin>插件列表

build标签根据不同的位置分为两种:

  • project build
    • 全局配置。针对整个项目的所有情况都有效
    • 包含了build的基本元素和<sourceDirectory>、<scriptSourceDirectory>、<testSourceDirectory>、<outputDirectory>、<testOutputDirectory>
  • profile build
    • 在profile标签中。针对不同的profile配置
    • 只包含了build的基本元素

基本元素示例:

<build>  
   <defaultGoal>install</defaultGoal>  
   <directory>${basedir}/target</directory>  
   <finalName>${artifactId}-${version}</finalName> 
   <filters>
      <filter>filters/filter1.properties</filter>
   </filters> 
   ...
</build> 

注:maven的默认filter文件夹为${basedir}/src/main/filters。定义在filter的文件中的name=value键值对,会在build时代替${name}值应用到resources中。

resource

配置各个资源在maven项目中的具体路径。用于包含或者排除某些资源文件。标签resource包含以下元素:

标签类型描述
targetPathString指定build后的resource存放的文件夹,默认是basedir。通常被打包在jar中的resources的目标路径是META-INF
filteringString表示为这个resource,filter是否激活,默认false。
directoryString资源文件源路径,默认位于${basedir}/src/main/resources/目录下。
includesList<String>一组文件名的匹配模式,被匹配的资源文件将被构建过程处理。
excludesList<String>一组文件名的匹配模式,被匹配的资源文件将被构建过程忽略。

示例:

<build>  
    ...  
    <filters>
       <filter>filters/filter1.properties</filter>
    </filters>
    <resources>  
       <resource>  
          <targetPath>META-INF/plexus</targetPath>  
          <filtering>true</filtering>  
          <directory>${basedir}/src/main/plexus</directory>  
          <includes>  
             <include>configuration.xml</include>  
          </includes>  
          <excludes>  
             <exclude>**/*.properties</exclude>  
          </excludes>  
       </resource>  
    </resources>  
    <testResources>  
        ...  
    </testResources>  
    ...  
</build>  

plugin

设置构建过程中需要的插件。标签plugin包含以下元素:

标签类型描述
groupIdString插件全局惟一的标识符
artifactIdString插件唯一模块ID
versionString插件版本号
extensionsString是否加载该插件的扩展,默认false。
executionsList<PluginExecution>该插件的某个goal的执行方式。
dependenciesList<dependency>该插件所需要的依赖类库。
inheritedString该插件的configuration中的配置是否可以被继承。默认true。
configurationDOM该插件所需要的特殊配置,在父子项目之间可以覆盖或合并。

示例:

<build>  
    ...  
    <plugins>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-jar-plugin</artifactId>  
            <version>2.0</version>  
            <extensions>false</extensions>  
            <inherited>true</inherited>  
            <configuration>  
                <classifier>test</classifier>  
            </configuration>  
            <dependencies>...</dependencies>  
            <executions>...</executions>  
        </plugin>  
    </plugins>  
</build>

execution

execution元素包含了插件执行需要的信息。

标签类型描述
idString执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标
phaseString绑定目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段
goalsList<goal>配置的执行目标
inheritedString配置是否被传递到子POM
configurationDOMDOM对象的配置

configuration

不管是plugin还是execution都有元素configuration,该标签包含的元素和插件执行目标相关,为插件执行目标提供自定义传参。所以,configuration内元素各不相同,和执行目标提供的对外参数相关。

<?xml version="1.0" encoding="UTF-8"?>
<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">
    ...
    
    <build>
        <plugins>
            <!-- 使用spring-boot-maven-plugin打包独立可执行程序 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.4.2.RELEASE</version>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <finalName>milkyway-pc</finalName>
                    <classifier>1.0-SNAPSHOT</classifier>
                    <outputDirectory>../target</outputDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

上述使用了Maven常用插件 spring-boot-maven-plugin,使用该插件的默认goal:repackage(使用标签executions),该goal会在mvn package之后,再次打包可执行的jar/war,并将mvn package生成的软件包重命名为*.original。
使用标签configuration为插件spring-boot-maven-plugin传参,配置最终生成的jar名。注:该configuration内的元素可以参考插件spring-boot-maven-plugin提供了哪些对外配置参数。
spring-boot-maven-plugin 见《Maven-build之spring-boot-maven-plugin》

pluginManagement

pluginManagement的配置和plugins的配置是一样的,只是用于继承,使得可以在孩子pom中使用。
父pom:

<build>  
    ... 
    <pluginManagement>  
        <plugins>  
            <plugin>  
              <groupId>org.apache.maven.plugins</groupId>  
              <artifactId>maven-jar-plugin</artifactId>  
              <version>2.2</version>  
                <executions>  
                    <execution>  
                        <id>pre-process-classes</id>  
                        <phase>compile</phase>  
                        <goals>  
                            <goal>jar</goal>  
                        </goals>  
                        <configuration>  
                            <classifier>pre-process</classifier>  
                        </configuration>  
                    </execution>  
                </executions>  
            </plugin>  
        </plugins>  
    </pluginManagement>  
    ...  
</build>

子pom中,我们只需要配置:

<build>  
    ...  
    <plugins>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-jar-plugin</artifactId>  
        </plugin>  
    </plugins>  
    ...  
</build>

大大简化了孩子pom的配置。

…Directory

往往配置在父项目中,供所有父子项目使用。目录可以使用绝对路径,若使用相对路径,则都是在${basedir}目录下。根据“约定大于配置”的原则,一般不需要自定义配置,使用默认配置即可。

Maven多环境配置实战 filter

详见《Maven-build结合profile实现多环境配置实战》

Maven插件是一种可插拔的工具,可以在Maven构建过程中执行特定的任务。其中,maven-dependency-plugin和maven-surefire-plugin是两个常用的插件。 maven-dependency-plugin插件可以用来管理项目依赖,可以帮助我们列出项目中的依赖关系,复制依赖文件到指定目录,解压依赖文件等。常用的配置包括: - list:列出项目依赖 - copy-dependencies:将所有依赖文件复制到指定目录 - unpack:解压指定的依赖文件 maven-surefire-plugin插件则是用来执行项目的单元测试的。它可以在Maven构建过程中自动执行单元测试,并生成测试报告。常用的配置包括: - includes/excludes:指定要执行的测试类或排除的测试类 - parallel:指定测试是否并行执行 - reportsDirectory:指定测试报告生成的目录 在POM文件中配置这两个插件,可以通过以下方式: ``` <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M5</version> <configuration> <includes> <include>**/*Test.java</include> </includes> <parallel>methods</parallel> <threadCount>10</threadCount> <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory> </configuration> </plugin> </plugins> </build> ``` 以上是一个简单的POM文件中Maven插件配置maven-dependency-plugin和maven-surefire-plugin的示例,其中maven-dependency-plugin在package阶段执行复制依赖文件的任务,maven-surefire-plugin在test阶段执行单元测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会叫的狼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值