Maven速查手册 - POM

快速预览

完整的POM文件示例:


  4.0.0
 
  
  ...
  ...
  ...
  ...
  ...
  ...
  ...
  ...
  ...
 
  
  ...
  ...
 
  
  ...
  ...
  ...
  ...
  ...
  ...
  ...
  ...
 
  
  ...
  ...
  ...
  ...
  ...
  ...
  ...
  ...
  ...

基础配置

项目基本信息
junit
junit
4.0
jar
  • groupId:唯一的组织名称或者项目名称
  • artifactId:项目名称
  • version:项目版本号
  • packaging:项目的分发类型(jar、war等其它方式)
父类POM

  
  4.0.0
 
  
    org.codehaus.mojo
    my-parent
    2.0
    ../my-parent
  
 
  my-project
  

  • relativePath:父项目的路径(相对路径)
多模块配置

  4.0.0
 
  org.codehaus.mojo
  my-parent
  2.0
  pom
 
  
    my-project
    another-project
    third-project/pom-example.xml
  

  • module:子模块artifactId

注:多模块项目父模块分发类型必须为POM

依赖配置

  ...
  
    
      junit
      junit
      4.0
      jar
      test
      true
    
    ...
  
  ...

构建时指定classifier,可以设置任意名称:


        ${artifactId}-${version}
        
            
                org.apache.maven.plugins
                maven-jar-plugin
                3.0.2
                
                    jdk5
                
            
        
    
  • classifier:它表示在相同版本下针对不同的环境或者jdk使用的jar,如果配置了这个元素,则会将这个元素名在加在最后来查找相应的jar。

  • type:对应于从属工件的包装类型, 这默认为jar。

  • scope:maven的scope决定依赖的包是否加入本工程的classpath下,Maven提供了如下几种依赖范围

假设 A -> B, B -> C, 由 A -> B, 推出 A -> C,则C具有传递性

依赖范围 编译 测试 运行时 传递性 说明
compile Y Y Y Y 默认作用域,编译依赖作用于所有环境变量中
test - Y - - 编译期不需要该依赖,仅作用于测试和运行环境中
provided Y Y - - 类似于compile,但表示打包的时候可以不用包进去,期望JDK或容器在运行时提供它。
它仅在编译和测试类路径中可用,并且不是传递性的。
runtime - Y Y Y 他的范围表明该依赖不是编译所必需的,而是用于执行。
它在运行时和测试类路径中,但不在编译类路径中。
system Y Y - Y 和provide作用域类似,用于非Maven管理第三方jar依赖, 通常和systemPath配合使用
  • systemPath:

仅在依赖范围是system时使用。 否则,如果设置此元素,构建将失败。

路径必须是绝对路径,因此建议使用属性来指定机器特定路径(更多属性如下),例如$ {java.home} / lib。

由于假定系统范围依赖关系是事先安装的,因此Maven不会检查项目的存储库,而是检查以确保文件存在。

如果没有,Maven将会失败,并建议您手动下载并安装它

  • optional:仅限制包的传递依赖性,不影响包的classpath
依赖版本规范
  • 1.0 : 软依赖1.0,可以匹配所有其它的依赖范围
  • [1.0] : 强制性依赖 1.0
  • (,1.0):x <=1.0
  • [1.2, 1.3]:1.2<= x <=1.3
  • [1.0, 2.0]: 1.0 <= x < 2.0
  • [1.5,): x>=1.5
  • (,1.0],[1.2,):x <= 1.0 或 x >= 1.2
  • (,1.1),(1.1,):非 1.1 之外的所有版本
Exclusions

排除项包含一个或多个排除元素,每个排除元素都包含一个groupId和artifactId,表示要排除的依赖关系。
与可选或不可安装和使用的可选项不同,排除项主动将自己从依赖关系树中移除。


  ...
  
    
      org.apache.maven
      maven-embedder
      2.0
      
        
          org.apache.maven
          maven-core
        
      
    
    ...
  
  ...


  ...
  
    
      org.apache.maven
      maven-embedder
      3.1.0
      
        
          *
          *
        
      
    
    ...
  
  ...

Properties

  ...
  
    1.7
    1.7
    UTF-8
    UTF-8
  
  ...

dependencyManagement

只是对版本进行管理,不会实际引入jar, 在依赖配置中无需指定版本。


    
        
          
            org.thymeleaf
            thymeleaf
            3.0.7.RELEASE
          
        
    

Build Settings

Build

  install
  ${basedir}/target
  ${artifactId}-${version}
  
    filters/filter1.properties
  
  ...

  • defaultGoal:如果没有给出缺省目标(goal)或执行阶段(phase),则执行该目标。如果给出了一个目标,它应该被定义为它在命令行中(例如jar:jar)。 如果定义了阶段(例如安装),也是如此

  • directory:项目编译路径

  • finalName:项目包名称

  • filter:定义* .properties文件,其中包含适用于接受其设置的资源的属性列表(如下所述)。换句话说,过滤器文件中定义的“name = value”对将替换构建资源中的$ {name}字符串。 上面的例子定义了filter /目录下的filter1.properties文件。 Maven的默认过滤器目录是$ {basedir} / src / main / filters /

Resources

指定项目中资源位置,资源通常不是代码,它们不会被编译。

例如,一个Plexus项目需要一个配置文件(指定容器的组件配置)来存放在META-INF / plexus目录中。 尽管我们可以很容易地将这个文件放在src / main / resources / META-INF / plexus中,但是我们希望给Plexus自己的src / main / plexus目录。 为了使JAR插件正确地绑定资源,你需要指定类似于以下内容的资源


  
    ...
    
      
        META-INF/plexus
        false
        ${basedir}/src/main/plexus
        
          configuration.xml
        
        
          **/*.properties
        
      
    
    
      ...
    
    ...
  

  • targetPath:指定资源文件打包后路径
  • directory:资源文件工程路径
  • include:指定将文件作为资源包含在该指定目录下,使用*作为通配符。
  • exclude:指定要忽略哪些文件
  • testResources: 测试资源文件
Plugins

  
    ...
    
      
        org.apache.maven.plugins
        maven-jar-plugin
        2.6
        false
        true
        
          test
        
        ...
        ...
      
    
  

  • extensions: 是否加载这个插件的扩展(生命周期扩展),默认是false。
  • inherited: 是否让子模块继承这个插件, 默认为true。
  • configuration:插件参数配置
  • dependencies:插件依赖关系配置
  • executions:插件目标绑定生命周期
Plugin Management

管理插件的版本,不会实际引入jar, 在插件配置中无需指定版本。


  ...
  
    ...
    
      
        
          org.apache.maven.plugins
          maven-jar-plugin
          2.6
          
            
              pre-process-classes
              compile
              
                jar
              
              
                pre-process
              
            
          
        
      
    
    ...
  

Extensions

自定义生命周期扩展


  ...
  
    ...
    
      
        org.apache.maven.wagon
        wagon-ftp
        1.0-alpha-3
      
    
    ...
  

Reporting

该配置通常用于项目文档和报告生成


  ...
  
    
      
        ...
        
          
            sunlink
            
              javadoc
            
            true
            
              
                http://java.sun.com/j2se/1.5.0/docs/api/
              
            
          
        
      
    
  
  ...

更多项目信息

Licenses

  
    Apache License, Version 2.0
    https://www.apache.org/licenses/LICENSE-2.0.txt
    repo
    A business-friendly OSS license
  

Organization

  ...
  
    Codehaus Mojo
    http://mojo.codehaus.org
  

Developers

  ...
  
    
      jdoe
      John Doe
      [email protected]
      http://www.example.com/jdoe
      ACME
      http://www.example.com
      
        architect
        developer
      
      America/New_York
      
        http://www.example.com/jdoe/pic
      
    
  
  ...

Contributors

  ...
  
    
      Noelle
      [email protected]
      http://noellemarie.com
      Noelle Marie
      http://noellemarie.com
      
        tester
      
      America/Vancouver
      
        [email protected]
      
    
  
  ...

Environment Settings

Issue Management

定义缺陷跟踪系统信息(Bugzilla,TestTrack,ClearQuest等)。


  ...
  
    Bugzilla
    http://127.0.0.1/bugzilla/
  
  ...

Continuous Integration Management

  ...
  
    continuum
    http://127.0.0.1:8080/continuum
    
      
        mail
        true
        true
        false
        false
        
[email protected]
...
Mailing Lists

  ...
  
    
      User List
      [email protected]
      [email protected]
      [email protected]
      http://127.0.0.1/user/
      
        http://base.google.com/base/1/127.0.0.1
      
    
  
  ...

SCM

源代码软件版本管理信息配置


  ...
  
    scm:svn:http://127.0.0.1/svn/my-project
    scm:svn:https://127.0.0.1/svn/my-project
    HEAD
    http://127.0.0.1/websvn/my-project
  
  ...

Repositories

  ...
  
    
      
        false
        always
        warn
      
      
        true
        never
        fail
      
      codehausSnapshots
      Codehaus Snapshots
      http://snapshots.maven.codehaus.org/maven2
      default
    
  
  
    ...
  
  ...

Distribution Management

  ...
  
    
      false
      corp1
      Corporate Repository
      scp://repo/maven2
      default
    
    
      true
      propSnap
      Propellors Snapshots
      sftp://propellers.net/maven
      legacy
    
    ...
  
  ...

Profiles

  ...
  
    
      test
      ...
      ...
      ...
      ...
      ...
      ...
      ...
      ...
      ...
    
  

Activation

  ...
  
    
      test
      
        false
        1.5
        
          Windows XP
          Windows
          x86
          5.1.2600
        
        
          sparrow-type
          African
        
        
          ${basedir}/file2.properties
          ${basedir}/file1.properties
        
      
      ...
    
  

你可能感兴趣的:(Maven速查手册 - POM)