Maven Pom文件总结

Maven

maven生命周期

  • clean: 删除构建目录
  • validate: 检查工程配置是否正确,完成构建过程的所有必要信息是否能够获取到。
  • compile: 编译工程源码
  • test: 使用适当的单元测试框架(例如JUnit)运行测试。
  • package: 获取编译后的代码,并按照可发布的格式进行打包,例如 JAR、WAR 或者 EAR 文件
  • verify: 运行检查操作来验证工程包是有效的,并满足质量要求。
  • install: 安装工程包到本地仓库中,该仓库可以作为本地其他工程的依赖。
  • site: 创建新的报告文档、部署站点等
  • deploy: 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程。

pom.xml常用节点

基本信息

4.0.0
com.xstore.order.production
xstore-order-production
xstore-order-production
pom
1.0-SNAPSHOT

groupId, artifactId, name, version 构成应用的坐标

packaging 默认为 jar

packaging

default bindings

  • pom 声明该artifact仅仅是pom文件,是子模块的容器
  • jar
  • ejb
  • maven-plugin
  • war
  • ear
  • rar
version
  • SNAPSHOT:快照版本
  • ALPHA:内测版本
  • BETA:公测版本
  • RELEASE:稳定版本
  • GA:正式发布

properties

dependencyManagement

build

Core Maven Plugins

The Resources Plugin

资源插件将文件从输入资源目录复制到输出目录。

  • resources: 将main源码下的资源文件复制到main输出目录中
  • testResources: 将test源码下的资源文件复制到test输出目录中
  • copy-resources: 讲任意资源文件复制到输出目录中,需要指定来源和输出目录

    maven-resources-plugin
    3.0.2
    
        output-resources
        
            
                input-resources
                
                    *.png
                
                true
            
        
    

上面的配置,将input-resources中的资源文件复制到output-resuorces中,并且排除了以png为后缀的文件。

其中filtering设置为true,则会用properties中声明的变量替换资源文件中的占位符变量:


    Baeldung

将替代资源文件中包含如下文本的地方:

Welcome to ${resources.name}!
The Compiler Plugin

用以构建源码

  • compile 编译main下的源码
  • testCompile 编译test下的源码

    maven-compiler-plugin
    3.7.0
    
        1.8
        1.8
    

方便起见,可以将版本号声明为一个属性:


    1.8
    1.8

可以做一些额外的设置,如警告unchecked操作:


    
        -Xlint:unchecked
    

The Surefire Plugin

用于执行单元测试,默认情况下将在target/surefire-reports中生成xml报告

默认情况下,surefire将自动包含所有以Test开始或以Test,Tests,TestCase结束的测试类

包含在顶级POM中

  • test 默认选项的goal

    maven-surefire-plugin
    2.21.0
    
        
            DataTest.java
        
        
            DataCheck.java
        
    

The Failsafe Plugin

用于项目的集成测试

与surefire插件不同的是,它必须在pom.xml中明确指定goal的值

  • integeration-test: 运行集成测试,测试失败不会令构建失败
  • verify: 确认集成测试通过

    maven-failsafe-plugin
    2.21.0
    
        
            
                integration-test
                verify
            
            
                ...
            
        
    

默认包含如下测试文件:


    **/IT*.java
    **/*IT.java
    **/*ITCase.java

IT -> Integration Test

The Verifier Plugin

确保文件和目录的存在或不存在,也可以根据正则表达式检查文件的内容

  • verify 显式指定时才会触发该插件

    maven-verifier-plugin
    1.1
    
        input-resources/verifications.xml
    
    
        
            
                verify
            
        
    

默认的检查文件位于src/test/verifier/verifications.xml,如果想要使用别的文件,需要指定verificationFile参数

下面的校验要求input-resources/baeldung.txt存在单词Welcome


    
        
            input-resources/baeldung.txt
            Welcome
        
    

The Install Plugin

将应用打包至本地仓库中。这个插件包含在顶级POM中,因此不需要显式的包含它

The Deploy Plugin

将包部署到远程Maven仓库中。

distributionManagement

用以定义要部署的仓库的信息

modules

Maven Pom Modules


  my-project
  another-project
  third-project/pom-example.xml

无需考虑项目之间的依赖关系,maven会确保依赖的模块优先被构建

Maven 项目管理

https://blog.csdn.net/AAzpf/article/details/79650139

http://www.codebelief.com/article/2017/10/maven-best-practice-to-manage-multi-module-project/

使用maven进行模块管理,每个模块下面都有一个pom文件,pom中维护各模块之间的依赖和继承关系。

项目模块化可以将通用的部分抽离出来,方便重用。修改一部分代码不再需要build整个项目,缩短了build时间。

Maven 依赖管理

http://ifeve.com/maven-dependency-mechanism/

传递性依赖

假设你的项目依赖于一个库,而这个库又依赖于其他库。你不必自己去找出所有这些依赖,你只需要加上你直接依赖的库,Maven会隐式的把这些库间接依赖的库也加入到你的项目中。当项目中出现多个版本构件依赖的情形,依赖调解决定最终应该使用哪个版本。项目会选择依赖关系树中路径最短的版本作为依赖。当两个版本的依赖路径长度一致时,POM中依赖声明的顺序决定了哪个版本会被使用,也叫作”第一声明原则”。

依赖范围

  • compile 默认范围
  • provided provided范围表明你希望由JDK或者某个容器提供运行时依赖。如Servlet API和相关的Java EE APIs,会由web容器提供运行时依赖。provided依赖只对编译和测试classpath有效,并且不能传递。
  • runtime 编译时不需要依赖,而只在运行时依赖。此依赖范围对运行和测试classpath有效,对编译classpath无效。
  • test 只在编译测试代码和运行测试的时候需要,应用的正常运行不需要此类依赖。
  • system 系统范围与provided类似,不过你必须显式指定一个本地系统路径的JAR,此类依赖应该一直有效,Maven也不会去仓库中寻找它。
  • import import范围只适用于pom文件中的部分。表明指定的POM必须使用部分的依赖。因为依赖已经被替换,所以使用import范围的依赖并不影响依赖传递。

依赖管理

Maven提供了一个机制来集中管理依赖信息,叫做依赖管理元素。假设你有许多项目继承自同一个公有的父项目,那可以把所有依赖信息放在一个公共的POM文件,并且在子POM中简单第引用该构件即可。

你可能感兴趣的:(Maven Pom文件总结)