zoukankan      html  css  js  c++  java
  • Maven入门

    Apache Maven是一个软件项目管理的综合工具。基于项目对象模型(POM)的概念,提供了帮助管理构建、文档、报告、依赖、发布等方法,Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。
    maven的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性,利用maven自身及其插件还可以获得代码检查报告、单元测试覆盖率、实现持续集成等等。

    一、Maven做了什么?
    1.项目标准化:
    Maven项目具有统一的项目结构,这个项目结构是参考业界的最佳实践而成,为后面使用统一的maven命令打下了基础,如测试mvn test、打包mvn package等,无需写一行脚本,就可以方便的实现众多功能。
    2.文档和报告:
    使用mvn site可以快速生成项目站点,apache很多开源项目站点都采用maven生成,会出现built by maven字样的图标。
    3.类库管理:
    类库管理是maven一个比较核心的功能,我们就需要将项目所依赖的类库加入到pom.xml中,那么maven会自动将依赖的类库下载到本地,并且下载的类库如果还依赖其他的类库,它也会自动下载过来,这样我们就不需要一个一个类库去下载了。
    4.发布管理:
    使用maven可以方便的进行项目发表管理。在项目开发到一定阶段,可以使用mvn package打包,它会自动先运行mvn test,跑所有的Test Case,只有全部通过才能正确打包。生成的war包(如果项目的packaging为war)在target目录下。这个 war包与使用ant脚本生成一样,但无需一行脚本,这也是maven对比ant的优势之一。使用mvn install将编译和打包好的文件发布到本地仓库中。使用mvn deploy在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository。

    二、Maven的安装与配置
    1.Maven下载与安装:官网下载后,解压到安装目录即可。
    2.Maven的配置:
    (1)系统变量:
    - 变量名:JAVA_HOME,值:jdk安装路径
    - 变量名:MAVEN_HOME,值:Maven安装路径
    - 变量名:M2_HOME,值:Maven安装路径
    - 变量名:Path,值:添加%M2_HOME%in到末尾
    验证:cmd窗口输入:mvn -version,不报错即可。
    (2)Eclipse配置:窗口>首选项>Maven>Installation>Add,选择Maven安装目录即可。
    (3)更改本地仓库地址
    Maven的本地仓库是用来存储所有项目的依赖关系(插件jar和其他文件)的本地文件夹。当你建立一个Maven项目,所有相关文件将被存储在你的Maven本地仓库。
    默认的本地仓库为C:用户用户名.m2文件夹。本地仓库这种存放文件的目录放在C盘下显然不妥,可改变存放位置到指定路径。
    settings.xml文件里面包含仓库地址、镜像、插件、代理等配置,也是maven中一个核心配置文件。这里只介绍关于更改本地仓库位置的部分。步骤如下:

    1. 打开Maven安装目录confsettings.xml,添加一行<localRepository>更改后的本地仓库路径</localRepository>(最好就在相关注释下面添加)。
    2. 将settings.xml分别复制到C:用户用户名.m2和更改后的本地仓库目录中一份。
    3. 更改Eclipse中的maven配置:窗口>首选项>Maven>User Settings,看是否需要更改Eclipse关联的settings.xml和本地仓库。
    4. cmd窗口执行mvn help:system,会发现Maven从远程库下载的jar包都会放到新修改后的路径。 

    3.Maven升级:将最新版的Maven下载并解压到安装目录后,更新系统变量中MAVEN_HOMEM2_HOME的值即可。

    三、Maven在Eclipse中的使用
    关于直接在cmd中新建Maven项目、使用Maven命令等操作,目前没发现必要的需求,先略过不提,日后若有需求再添加。可参考博客
    1.创建Maven项目:
    文件>新建>其他>Maven>Maven Project,按照向导往下走即可。值得一提的是,中间会让你输入Group Id和Artifact Id。
    Group Id是组织标识,一般是域名.公司名的形式。
    Artifact Id是项目标识,也就是项目名称。
    Group Id和Artifact Id共同组成包名:(Group Id).(Artifact Id),所以,最好都不要有大写。
    2.运行mvn命令
    在Maven项目上右键>运行方式,可以运行一些常用mvn命令。
    如果没有,可以点击Maven Build,在弹出的窗口中输入要执行的mvn命令。
    3.Maven常用命令

    • clean:表示运行清理操作(会默认把target文件夹中的数据清理)。
    • clean compile:表示先运行清理之后运行编译,会将代码编译到target文件夹中。
    • clean test:运行清理和测试。
    • clean package:运行清理和打包。
    • clean install:运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用。
    • clean deploy:运行清理和发布(发布到私服上面)。

    四、pom.xml简要说明
    POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明依赖,等等。
    maven的pom.xml文件结构非常清晰,把项目创建好后,我们基本上是在dependencies元素下添加一些子元素及plugins元素下添加一些插件,下面介绍一下各个元素的含义。

    1) project是所有pom.xml的根元素,并且在里面定义了命名空间和xsd元素。
    2) modelVersion 当前pom模型的版本。
    3) groupId定义当前maven项目隶属的实际项目,并会根据这给项目建立包结构。
    4) artifactId定义项目中的某个模块名称,如果只有一个模块那就是项目的名称。
    5) version 定义maven项目当前所处的版本号,默认0.0.1-SNAPSHOT为快照版本。
    6) packaging定义maven项目的打包方式,可以是jar包、war包、pom。
    7) dependencies元素底下就是加入依赖包的地方,那么我们从哪里查询依赖包呢,可以查询的地方比较多,我给出一个大家用得比较多的仓库:http://mvnrepository.com
    8) 每个dependency都是一个依赖包,依赖包也就是在dependency里面定义各个依赖包的坐标,这样maven就会从网上下载依赖包到你本地仓库中,有所不同的是dependency元素包含了一个子元素,这个就是对maven生命周期的一个说明,当然除了上面四个子元素外,还包含几个其他的元素。
       (1)type说明依赖的类型
       (2)optional标记依赖是否可选
       (3)exclusions 用来排斥传递依赖
       具体来看看这个结构: 

      <dependency>
    
         <groupId>实际项目</groupId>
    
         <artifactId>模块</artifactId>
    
         <version>版本</version>
    
         <type>依赖类型</type>
    
         <scope>依赖范围</scope>
    
         <optional>依赖是否可选</optional>
    
         <!—主要用于排除传递性依赖-->
    
         <exclusions>
    
           <exclusion>
    
             <groupId></groupId>
    
             <artifactId></artifactId>
    
           </exclusion>
    
         </exclusions>
    
       </dependency>

    Maven是通过groupId、artifactId、version这三类似于坐标的元素来确定唯一性的,因此这三个元素对于每个依赖大多是必须的。
    没有任何实际的Java代码,我们能够定义一个Maven项目的POM,这体现了Maven的一大优点,它能让项目对象模型最大程度地与实际代码相独立,我们可以称之为解耦。这在很大程度上避免了Java代码和POM代码的相互影响。只要我们定义的POM稳定后,日常的Java代码开发工作中基本不会涉及到POM的修改。

    参考:AlanLeeMaven系列

  • 相关阅读:
    坚持
    随笔
    C++:对象和类
    STEP7 V14 安装和激活
    c++:cout
    C 格式化字符串处理函数
    WIn:消极处理机制
    Python:requests发送json格式数据
    Python:logging日志功能的基本使用
    PLC:西门子测试
  • 原文地址:https://www.cnblogs.com/cage666/p/7295387.html
Copyright © 2011-2022 走看看