Maven

安装
下载 Maven :http://maven.apache.org/download.html
设置环境变量:path中添加 C:\apache-maven-3.0.5\bin;
验证是否安装成功 mvn --version


pom.xml样板,所有的maven项目都会继承超级pom.xml,*\maven\project\pom-4.0.0.xml。


  4.0.0
  com.tmg
  performance
  war
  1.0.1
  performance Maven Webapp
  http://maven.apache.org
 
  
    2.3.15.2
    3.2.8.RELEASE
    3.2.4.RELEASE
    3.6.0.Final
    1.3.1
    yyyy-MM-dd
    -${project.version}-${maven.build.timestamp}
  
  
  
      
        commons-io  
        commons-io  
        2.4  
      
      
        commons-fileupload  
        commons-fileupload  
        1.3.1  
    
  
   
     com.google.code.gson
     gson
     2.2.2
   
   
        xml-apis
        xml-apis
    1.4.01
   
   
        org.apache.poi
        poi
        3.10-FINAL
   
   
        org.apache.poi
        poi-ooxml
        3.10-FINAL
   

     
        net.sourceforge.htmlunit  
        htmlunit  
        2.13  
    
    
        org.jsoup
        jsoup
        1.6.3
    
    
      junit
      junit
      3.8.1
      test
    
     
    
      org.jasig.cas.client
      cas-client-core
      3.2.1
    
    
      org.springframework.security
      spring-security-core
      ${spring.secutity.version}
    
    
      org.springframework.security
      spring-security-cas
      ${spring.secutity.version}      
    
    
        org.springframework.security
        spring-security-config
        ${spring.secutity.version}
    
    
        oro
        oro
        2.0.8
    
    
    
        org.springframework
        spring-core
        ${spring.version}
    
    
        org.springframework
        spring-context
        ${spring.version}
    
    
        org.springframework
        spring-beans
        ${spring.version}
    
    
        org.springframework
        spring-web
        ${spring.version}
    
    
        org.springframework
        spring-orm
        ${spring.version}            
    
    
        org.springframework.batch
        spring-batch-core
        2.1.7.RELEASE
    
    
        org.springframework.batch
        spring-batch-infrastructure
        2.1.7.RELEASE
    
    
        org.springframework
        spring-support
        2.0.8
     
    
        org.quartz-scheduler
        quartz
        1.8.5
    
    
        cglib
        cglib
        2.2.2
    
    
    
        org.springframework
        spring-context-support
        ${spring.version}
    
    
    
        net.sf.ehcache
        ehcache
        2.7.4
    
    
        org.hibernate
        hibernate-c3p0
        ${hibernate.version}
    
    
      org.hibernate
      hibernate-search
      3.4.2.Final
    
    
      org.hibernate
      hibernate-validator
      5.0.1.Final
    
    
        commons-dbcp
        commons-dbcp
        1.4
    
    
        commons-lang
        commons-lang
        2.6
    
    
        javax.annotation
        javax.annotation-api
        1.2
    
    
        org.aspectj
        aspectjtools
        1.6.11
    
    
        org.aspectj
        aspectjrt
        1.6.11
    
    
        org.aspectj
        aspectjlib
        1.6.2
    
    
        org.aspectj
        aspectjweaver
        1.6.11
    
    
        commons-net
        commons-net
        2.2
    
    
    
    
        org.apache.struts
        struts2-core
        ${struts.version}
        
                             
                com.sun
                tools
            
        
    
    
        org.apache.struts
        struts2-spring-plugin
        ${struts.version}
    
    
        org.apache.struts
        struts2-convention-plugin
        ${struts.version}
    
    
      org.apache.struts
      struts2-json-plugin
      ${struts.version}
    
    
      javax.servlet
      jstl
      1.2
    
    
      taglibs
      standard
      1.1.2
    
    
        javax.servlet
        javax.servlet-api
        3.0.1
        provided
    
    
        javax.mail
        javax.mail-api
        1.5.0
    
    
      org.slf4j
      slf4j-log4j12
      1.7.5
    
    
      org.apache.poi
      poi-scratchpad
      3.9
    
    
        mysql
        mysql-connector-java
        5.0.8
    
      
        org.mybatis  
        mybatis  
        3.1.1  
      
      
        org.mybatis  
        mybatis-spring  
        1.2.2  
    
    
        org.mybatis.caches
        mybatis-memcached
        1.0.0
        
    
        org.apache.httpcomponents
        httpclient
        4.3.3
    
    
        net.sf.json-lib
        json-lib
        2.4
        jdk15
    
    
    commons-beanutils
        commons-beanutils
        1.9.1
    
    
        com.tmg
        support
        0.0.1-SNAPSHOT
    
  
  
  
    performance
    
        
        
        
            org.apache.maven.plugins
            maven-compiler-plugin
            2.3.2
            
                1.6
                1.6
                true
                lines,vars,source
                UTF-8
            
        
        
        
            maven-war-plugin
            org.apache.maven.plugins
            2.1.1
        
        
        
            maven-assembly-plugin
            2.2
            
                
                    webapp
                    package
                    
                        single
                    
                    
                        performance
                        false
                        
                            src/main/assembly/webapp.xml
                        
                    
                
            
        
    
  



仓库
查找顺序为一下三个仓库依次查找

  • 本地仓库
    Maven 本地仓库是机器上的一个文件夹,保存了你的工程的所有依赖(library jar、plugin jar 等)。当你运行一次 Maven 构建,Maven 会自动下载所有依赖的 jar 文件到本地仓库中。它避免了每次构建时都引用存放在远程机器上的依赖文件。
    要修改默认位置,在 conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。E:/myrepo
  • 中央仓库
    Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。这个仓库由 Maven 社区管理。不需要配置(已经在超级pom中配置)。需要通过网络才能访问。查找中央仓库。
  • 远程仓库
    它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件,包括一些自己写的(在中央仓库中获取不到的)jar 文件,在pom中设置远程仓库(私服)。如有需要记得将repository的snapshots属性改为true。


    Maven_第1张图片
    pom.xml中配置远程库

自动发布构件到远程仓库

Maven_第2张图片
pom.xml中配置远程库

setting.xml中配置私服的用户名密码,id与pom.xml中一致


Maven_第3张图片
setting.xml中配置私服的用户名密码

mvn deploy后,所部署的包就自动上传到了nexus。

镜像
如果你的地理位置附近有一个速度更快的central镜像,或者你想覆盖central仓库配置,你可以使用settings.xml中的mirror配置。以下的mirror配置用maven.net.cn覆盖了Maven自带的central(中央仓库)。

Maven_第4张图片
settings.xml

我们也可以配置一个所有仓库的镜像,以保证该镜像是Maven唯一使用的仓库, *。镜像会覆盖超级pom中id为central的中央库。

参考Maven最佳实践


依赖的重复
项目----A---C----D
项目----B---D
也就是说,当前项目引入了2次D依赖,那么这时,Maven将采用路径最近原则,在路径一样时采用声明先后原则


模块划分
一个简单的Maven模块结构是这样的:
---- app-parent
|-- pom.xml (pom)
|
|-- app-util
| |-- pom.xml (jar)
|
|-- app-dao
| |-- pom.xml (jar)
|
|-- app-service
| |-- pom.xml (jar)
|
|-- app-web
|-- pom.xml (war)

这些模块的依赖关系如下:
app-dao --> app-util
app-service --> app-dao
app-web --> app-service
注意依赖的传递性,app-web依赖于app-dao,app-util。

Maven_第5张图片
parent pom.xml

特殊的地方在于,这里的packaging为pom。所有带有子模块的项目的packaging都为pom。


Maven_第6张图片
util pom.xml

packaging如果不进行配置,它的默认值是jar。groupId和version默认从父模块继承了。

Maven_第7张图片
dao pom.xml

app-dao依赖于app-util。这里要注意的是version的值为${project.version},这个值是一个属性引用,指向了POM的project/version的值。

Maven_第8张图片
web pom.xml

web模块是显示声明打成war包的。最后我们在 app-parent 根目录中运行 mvn clean install,build整个项目,Maven根据我们的依赖配置,智能的安排了顺序,app-util, app-dao, app-service, app-web。最后,你可以在 app-web/target 目录下找到文件 app-web-1.0-SNAPSHOT.war


父pom.xml的标签
作用:当子类不需要父pom中的某些依赖的时(别的子类需要),就可以使用。被标签所包裹的依赖是不会主动被加载进入子pom中,只有子pom中显式再次声明的时候才会被依赖


Maven_第9张图片
父pom.xml

可以省略version等其他配置,因为父pom中已经配置过了,若想获取父pom中所有的dependencyManagement中的构件配置,则在子pom中如下配置


Maven_第10张图片
子pom.xml

同理,见图
Maven_第11张图片
父pom.xml

Maven_第12张图片
子pom.xml

插件
Maven实际上是一个执行插件的框架,其所有的任务其实都是由插件完成。一个插件通常提供一系列的目标操作,并且目标操作可以通过以下格式的命令执行:mvn [插件名]:[目标操作名]。例如,一个Java项目可以通过运行下面的命令使用maven-compiler-plugin的compile目标操作编译。mvn compiler:compile

类型 描述
构建插件(Build plugins) 这类插件在构建过程中执行,并且应该配置在pom.xml文件的节点中。
报告插件(Reporting plugins) 这类插件在生成站点过程中执行,并且应该配置在pom.xml文件的节点中。

下面是一些常用的插件的列表:

  • clean 构建完成后清理目标,删除目标目录。
  • compiler 编译Java源文件。
  • surefile 运行JUnit单元测试,生成测试报告。
  • jar 从当前项目生成JAR文件。
  • war 从当前项目生成WAR文件。
  • javadoc 生成项目的Javadoc。
  • antrun 运行任意指定构建阶段的一系列ant任务。

要点:
重复依赖时,Maven将采用路径最近原则,在路径一样时采用声明先后原则。
查找仓库的顺序为:本地仓库(在maven的setting.xml中配置),中央仓库(不需要配置),私库(如nexus)。


你可能感兴趣的:(Maven)