Maven构建

简介

Apache Maven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以从一个中央信息管理项目的构建,报告和文档的软件项目管理工具。

Apache Maven一个潜在的基于java的Apache Ant的构建工具的替代者。ant脚本是可以直接运行在maven中的。maven和ant最大的差别就是在于maven的编译以及所有的脚本都有一个基础,就是POM(project object model),这个模型定义了项目的方方面面,然后各式各样的脚本在这个模型上工作,而ant完全是自己定义。

Maven它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期,一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

Maven主要做的是两件事:

  • 1.统一开发规范与工具

  • 1.统一管理jar包

Maven的安装

安装maven超级简单,总共分三步:

- 下载 Maven ,其实就是一个压缩包,解压一下。下载地址

Maven构建_第1张图片
image.png

1、bin目录

包含了mvn运行的脚本,bat结尾的是windows批处理脚本

2、boot目录

只有一个文件 plexus-classworlds-2.5.2.jar,是一个类加载器框架,Maven使用他加载自己的类库。

3、conf目录

settings.xml 文件

4、lib目录

Maven运行时需要的Java类库

- 配置一下环境变量

有两个环境变量可以配置:

MAVEN_HOME = 你自己的Maven安装地址
在path变量末尾加入“%MAVEN_HOME%\bin;”

Maven构建_第2张图片
image.png

如果想让 Maven 跑得更快点,可以根据自己的情况来设置 MAVEN_OPTS

MAVEN_OPTS = -Xms128m -Xmx512m(可选)

- 最后,验证是否安装成功

现在我们打开 cmd,输入:

mvn -v

Maven构建_第3张图片
image.png

Maven 安装成功!

了解Maven仓库

使用 Maven 给我们带来的最直接的好处,就是统一管理jar 包,那么这些 jar 包存放在 本地仓库 中,默认地址位于 C:\Users\用户名.m2 目录下(当然也可以修改这个默认地址,当我们第一次输入mvn -v ,maven会在用户目录创建一个.m2的目录,这个是maven的本地仓库。)

我们可以将本地仓库理解“缓存”,目的是存放jar包。开发项目时项目首先会从本地仓库中获取 jar 包,当无法获取指定 jar 包的时候,本地仓库会从 远程仓库(或 中央仓库) 中下载 jar 包,并“缓存”到本地仓库中以备将来使用。

远程仓库(中央仓库)是 Maven 官方组织公布在互联网上的一个站点,里面收录了目前绝大多数主流的jar包,可通过 http://search.maven.org/ 来访问。这样一来,本地仓库会随着项目的积累越来越大。

Maven构建_第4张图片
image.png
Maven构建_第5张图片
image.png

Nexus是Maven仓库管理器,也可以叫Maven的私服,搭建私服可以加快构建速度,减少节省外网带宽。

修改本地仓库位置配置

本地仓库,在执行第一次mvn -v是会默认在用户文件夹生成.m2文件夹,我们可以通过maven的安装目录下面的conf文件夹里面的settings.xml来改变

Maven构建_第6张图片
image.png

依据该配置,Maven就会将下载的类库保存到D:\maven\repository中

为了保持核心的配置文件不变,我们可以将settings.xml文件拷贝到.m2目录下面。以后只要对这个文件做修改就可以了,maven会优先读取.m2下面的配置文件。(可选)

Eclipse的Maven项目

Eclipse安装Maven

打开eclipse,菜单“Help”-“Install New Software...”
在Work with 地址栏输入:http://download.eclipse.org/releases/oxygen (注意:oxygen是eclipse对应的版本名称),稍等片刻

Maven构建_第7张图片
image.png

配置Maven

Window --> Preferences

Maven构建_第8张图片
image.png

点击 Add 按钮,添加本地 maven 的安装路径值

Maven构建_第9张图片
image.png

点击 Browse 按钮,选到你 maven 的 setting.xml 配置文件

Maven构建_第10张图片
image.png

Eclipse的创建 Maven项目

选择新建项目,下载Maven项目

Maven构建_第11张图片
image.png
Maven构建_第12张图片
image.png

groupId、artifactId、version确定一个唯一的Maven

Maven构建_第13张图片
image.png

1、groupId

顾名思义,这个应该是公司名或是组织名。一般来说groupId是由三个部分组成,每个部分之间以"."分隔,第一部分是项目用途,比如用于商业的就是"com",用于非营利性组织的就  是"org";第二部分是公司名,比如"tengxun"、"baidu"、"alibaba";第三部分是你的项目名

2、artifactId

可以认为是Maven构建的项目名,比如你的项目中有子项目,就可以使用"项目名-子项目名"的命名方式

3、version

版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本。在Maven中很重要的一点是,groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标,这非常重要,我在使用和研究Maven的时候多次感受到了这点。

4、packing

项目打包的类型,可以使jar、war、rar、ear、pom,默认是jar

Maven构建_第14张图片
image.png

Maven项目的标准目录

src
  -main
      –bin   脚本库
      –java java源代码文件
      –resources 资源库,会自动复制到classes目录里
      –filters 资源过滤文件
      –assembly 组件的描述配置(如何打包)
      –config 配置文件
      –webapp web应用的目录。WEB-INF、css、js等
  -test
      –java 单元测试java源代码文件
      –resources 测试需要用的资源库
      –filters 测试资源过滤库
  -site Site(一些文档)
target
 -classes 项目主体输出目录
 -test-classes项目测试输出目录
 -site   项目site输出目录

工程根目录下就只有src和target两个目录

target是有存放项目构建后的文件和目录,jar包、war包、编译的class文件等
target里的所有内容都是maven构建的时候生成的

Maven构建_第15张图片
image.png

框中的src/main/javasrc/test/java还有src/main/resourcessrc/test/resources其实就是src里面的内容,只是为了开发方便调试,引用出来。

Maven pom.xml配置详解

新建的maven项目的pom.xml配置如下:

Maven构建_第16张图片
image.png

POM基础

1.Maven的声明
2.POM的关系,依赖,继承,模块, 属性
3.构建
4.报告
5.项目详细信息
6.环境设置

Maven命令

  1. 创建Maven的普通java项目:
    mvn archetype:create -DgroupId=packageName -DartifactId=projectName
  2. 创建Maven的Web项目:
    mvn archetype:create -DgroupId=packageName -DartifactId=webappName-DarchetypeArtifactId=maven-archetype-webapp
  3. 编译源代码: mvn compile
  4. 编译测试代码:mvn test-compile
  5. 运行测试:mvn test
  6. 产生site:mvn site
  7. 打包:mvn package
  8. 在本地Repository中安装jar:mvn install
  9. 清除产生的项目:mvn clean
  10. 生成eclipse项目:mvn eclipse:eclipse
  11. 生成idea项目:mvn idea:idea
  12. 组合使用goal命令,如只打包不测试:mvn -Dtest package
  13. 编译测试的内容:mvn test-compile
  14. 只打jar包: mvn jar:jar
  15. 只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile
    ( -skipping 的灵活运用,当然也可以用于其他组合命令)
  16. 清除eclipse的一些系统设置:mvn eclipse:clean

POM的关系补充说明

parent
父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。
parent使用dependencyManagement定义依赖关系
继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述groupID和artifactID信息),如果groupID和artifactID以外的一些信息没有描述,则通过groupID和artifactID匹配到这里的依赖,并使用这里的依赖信息。......
modules
模块是这个POM列出的项目,并作为一个组来执行,不需要考虑模块间依赖关系。一个POM打包的项目可以通过将它们列为模块来集合一组项目的构建,这些模块是目录的相对路径或这些项目的POM文件。 (Ps:继承和模块的区别:继承父不知子,但子知父。模块父知子,但子不知父。所以在具体的项目中一般都是继承和模块融合使用)
properties 的值作为$ {someVar}
Maven属性是值占位符,就像Ant中的属性一样。它们的值可以在POM中的任何地方通过使用符号${properties}来访问,或者它们可以被插件用作默认值


 

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

一个典型的pom.xml文件配置如下:

  
  
      
    4.0.0  
  
      
    com.winner.trade  
  
      
    trade-core  
  
      
    1.0.0-SNAPSHOT  
  
      
    jar  
  
      
    ...  
  
      
      
  
          
          
  
               
              
            com.winner.trade  
            trade-test  
            1.0.0-SNAPSHOT  
  
              
              
            test  
  
              
            false  
  
              
              
                  
                    org.slf4j  
                    slf4j-api  
                  
              
  
          
  
      
  
      
      
        UTF-8  
        1.5  
        1.5  
      
  
    ...  
  

构建配置

  
  
      
    myPorjectName  
  
      
    ${basedir}/target  
  
      
      
    install  
  
      
      
      
        ../filter.properties  
      
  
      
      
          
  
              
              
              
            resources  
  
              
            true  
  
              
            src/main/resources  
  
              
              
                **/*.properties  
                **/*.xml  
              
  
              
              
                jdbc.properties  
              
  
          
      
  
      
      
          
              
              
              
              
              
          
      
  
      
    ${basedir}\src\main\java  
  
      
    ${basedir}\src\main\scripts  
      
  
      
    ${basedir}\src\test\java  
  
      
    ${basedir}\target\classes  
  
      
    ${basedir}\target\test-classes  
      
  
      
      
      
      
  
          
          
          
          
          
          
            org.apache.maven.wagon  
            wagon-ssh  
            2.8  
          
  
      
  
      
      
          
              
            maven-assembly-plugin  
            2.5.5  
  
              
              
                  
  
                      
                    assembly  
  
                      
                    package  
  
                      
                      
                        single  
                      
  
                      
                    false  
  
                  
              
  
              
              
                ${finalName}  
                false  
                assembly.xml  
              
  
              
              
            false  
  
              
              
                ...  
              
  
              
            true  
  
          
      
  
      
      
      
      
        ...  
      
  
  

报告

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

项目信息配置

  
banseon-maven   
  
  
http://www.clf.com/   
  
  
  
  
A maven project to study maven.   
  
  
  
  
      
      
  
  
  
  
  
  
  
  
  
      
      
  
          
         Demo   
  
          
         [email protected]  
  
          
         [email protected]  
  
          
         [email protected]  
  
          
         http:/hi.clf.com/  
  
      
  
  
  
  
  
  
      
      
  
          
         HELLO WORLD   
  
          
         banseon   
  
          
         [email protected]  
  
          
          
  
          
          
             Project Manager  
            Architect   
          
  
          
         demo  
  
          
        http://hi.clf.com/   
  
          
          
             No   
          
  
          
         -5  
  
      
  
  
  
  
  
  
      
      
          
          
          
          
          
          
          
          
      
  
  
  
  
  
  
  
      
      
  
          
         Apache 2   
  
          
        http://www.clf.com/LICENSE-2.0.txt   
  
          
         repo  
  
          
         Abusiness-friendly OSS license   
  
      
  
  
  
  
  
  
      
    scm:svn:http://svn.baidu.com/banseon/maven/  
  
      
    scm:svn:http://svn.baidu.com/banseon/maven/  
      
  
      
      
  
      
     http://svn.baidu.com/banseon  
  
  
  
  
  
  
      
     demo   
  
      
     http://www.clf.com/  
  
   

分发配置

  
  
  
  
      
      
  
          
          
        true  
  
         repo-id   
         repo-name  
        file://${basedir}/target/deploy   
          
  
      
  
      
      
          
          
          
          
          
      
  
      
      
  
          
         site-id   
  
          
         site-name  
  
          
        scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web   
  
      
  
      
      
      
  
      
      
  
          
          
  
          
          
  
          
          
  
          
          
  
      
  
      
      
      
      
  
  

仓库

  
  
  
      
      
  
          
          
  
              
              
  
              
              
              
              
  
              
              
              
  
          
  
          
          
          
          
              
              
              
          
  
          
         repo-id   
  
          
         repo-name  
  
          
        http://192.168.1.169:9999/repository/   
  
          
          
          
          
         default  
  
      
  
  
  
  
  
  
      
      
  
  

profile配置

  
  
  
      
      
          
          
  
              
            false  
  
              
            1.7  
  
              
              
  
                  
                Windows XP  
  
                  
                Windows  
  
                  
                x86  
  
                  
                5.1.2600  
  
              
  
              
              
              
  
                  
                mavenVersion  
  
                  
                2.0.3  
  
              
  
              
              
              
  
                  
                /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/  
  
                  
                /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/  
  
              
  
          
          
          
          
          
          
          
          
          
          
          
      

POM 4.0的一个新功能是项目能够根据所在的环境来改变设置,profile元素包含两个任选的活化(轮廓触发器)和设定变化的向POM制成如果所选择的文档已被激活。例如,为测试环境构建的项目可能会指向与最终部署不同的数据库。或者依赖关系可以根据所使用的JDK版本从不同的存储库中提取。

profile配置项在setting.xml中也有,是pom.xml中profile元素的裁剪版本,包含了id,activation, repositories, pluginRepositories和 properties元素。这里的profile元素只包含这五个子元素是因为setting.xml只关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。如果一个settings中的profile被激活,它的值会覆盖任何其它定义在POM中或者profile.xml中的带有相同id的profile。
pom.xml中的profile可以看做pom.xml的副本,拥有与pom.xml相同的子元素与配置方法。它包含可选的activation(profile的触发器)和一系列的changes。例如test过程可能会指向不同的数据库(相对最终的deployment)或者不同的dependencies或者不同的repositories,并且是根据不同的JDK来改变的。只需要其中一个成立就可以激活profile,如果第一个条件满足了,那么后面就不会在进行匹配。

环境配置

  
  
  
      
     jira   
  
      
     http://jira.clf.com/  
  
  
  
  
  
  
      
      
  
      
      
  
      
      
  
          
          
  
              
              
  
              
              
  
              
              
  
              
              
  
              
              
  
              
            

你可能感兴趣的:(Maven构建)