Maven项目的构建与管理

作者: 梁朋举 | 来源:发表于2017-07-04 09:21 被阅读600次

    1.Maven命令

    Maven是Apache的一个跨平台的软件项目管理和构建工具,主要用于基于java平台的项目构建、依赖管理。



    Maven项目构建过程如上图所示,主要构建命令有几种:
    mvn validate 验证,验证项目是正确的并且所有的信息是可用的;
    mvn clean 清理,清理项目缓存输出,一般是target文件夹被删除;
    mvn compile 编译,将java源文件编译成.class文件;
    mvn test 测试,生成测试报告,运行test目录下的所有单元测试;
    mvn package 打包,将项目打成jar、war或者pom;
    mvn install 安装,将当前项目安装到本地maven库,供其他项目依赖。
    mvn deploy部署,在构建环境中完成,复制最终的包到远程库。
    执行后面的命令会自动执行前面的命令,比如执行mvn package时会执行validate、clean、compile、test、package五个阶段。

    2.Maven安装与配置

    1)安装jdk1.7并配置环境变量
    2)安装并配置maven环境变量
    到maven官网下载maven最新版压缩包,解压到本地,添加系统环境变量
    MAVEN_HOME: D:\develop\apache-maven-3.5.0
    Path: % MAVEN _HOME%\bin
    以上两步配置完毕后,在命令行执行mvn –v,可以maven版本信息和基本配置信息表示配置成功。
    3)自定义maven仓库位置
    找到maven安装目录conf,打开setting文件,修改localRepository节点配置为指定路径即可,比如:<localRepository>D:/maven/repository</localRepository>
    4)maven安装目录结构

    maven安装目录结构
    说明:
    bin中存放可执行的二进制文件
    conf存放settings.xml文件
    lib 运行maven所依赖的jar包
    5)maven项目目录约定
    src/main/java 存放项目的java源文件
    src/main/resources 存放项目的资源文件,如spring,hibernate、mybatis的配置文件
    src/test/java 存放所有的测试的java文件
    src/test/resources 存放测试用的资源文件
    target 项目输出位置
    pom.xml 依赖管理文件

    3.Maven核心概念

    1)项目对象模型

    Maven概念模型
    说明:maven根据pom.xml文件,把它转化成项目对象模型(POM),这时要解析依赖关系,然后去相对应的maven库中查找所依赖的jar包。在clean,compile,test,package等生命周期阶段都有相应的Plug-in来做这些事情,而这些plug-in会产生一些中间产物。
    2)maven仓库
    Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库local和中央仓库central。
    本地仓库:Maven本地库的Jar包仓库。
    中央仓库:Maven官方提供的远程仓库。
    当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包到本地仓库。
    3)maven坐标
    坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。
    groupId:定义当前maven项目属于哪个项目
    artifactId:定义实际项目中的某一个模块
    version:定义当前项目的当前版本
    packaging:定义当前项目的打包方式
    4)依赖管理
    依赖分为传递依赖、排除依赖,还有依赖冲突解决
    传递依赖:如果项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和间接引用的Jar包都下载到本地。
    排除依赖:如果我们只想下载直接引用的Jar包,那么需要在pom.xml将需要排除的Jar包的坐标写在中。
    依赖冲突:若项目中多个Jar同时引用了相同的Jar时,会产生依赖冲突,但Maven采用了最短路径优先和声明优先两种避免冲突的策略,因此在Maven中是不存在依赖冲突的。
    5)聚合与继承
    聚合:多个项目或者模块聚合到一起,建立一个package方式为pom的项目parent专门负责聚合工作,并使用modules-module指定子模块。
    继承:多个模块聚合时,子模块需要继承父模块以消除重复。

    4.Maven项目结构的几种构建方式

    1)手动建立maven目录
    安装Maven项目目录约定手动创建各个文件夹即可,一般不会使用这种方式;
    2)命令行maven命令自动创建maven项目
    本地磁盘建立一个空目录C:/maven/hello,命令行进入到hello目录,执行下面的命令
    mvn archetype:generate -DgroupId=com.cloud.hellomaven -DartifactId=hellomaven-service -Dversion=1.0.0-SNAPSHOT -Dpackage=com.cloud.service

    命令行方式建立maven项目目录
    执行成功的话会自动在hello中创建符合maven项目约定的目录结构。
    说明:
    archetype:generate:生成maven项目骨架
    • DgroupId指定maven坐标的groupId
    • DartifactId指定maven坐标的artifactId
    • Dversion指定maven坐标的version
    • Dpackage指定maven项目的src下的包名

    自动创建的maven项目结构如下

    自动创建的maven项目结构
    3)Eclipse IDE创建maven项目
    Eclipse提供了一个很好的插件m2eclipse无缝将Maven和Eclipse集成在一起,配置插件选择本地maven目录和配置文件setting.xml即可。
    点击Eclipse菜单栏File->New->Ohter->Maven,选择Maven Project,一路默认Next,有一步需要填写Group Id、Artifact Id、Version、选择打包方式Package(jar、war、pom),选择编译环境即可
    New Maven Project
    完成后目录结构如下
    Eclipse创建的Maven项目结构
    4)Idea IDE创建maven项目
    Idea IDE是一款很不错的开发Maven项目的IDE,创建一个maven web项目的过程如下:
    选择File-New-Project,选择Maven,勾选Create from archetype,选择maven-archetype-webapp,
    New Maven Project
    点击Next,填写Group Id、Artifact Id、Version三项
    Group Id、Artifact Id、Version坐标
    点击Next,选择Maven home,选择setting file
    Maven Home
    点击Next,填写Project name,选择项目路径即可
    Project name
    Finish完成maven web项目创建

    5.Pom.xml文件简单解析

    <project xmlns="http://maven.apache.org/POM/4.0.0"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
       <modelVersion>4.0.0</modelVersion>
       <!-- 子模块对父模块的继承,继承父模块的所有依赖 -->
       <parent>
          <groupId></groupId>
          <artifactId></artifactId>
          <version></version>
       </parent>
       <!-- 指定多个模块一起进行编译 -->
       <modules>
          <module></module>
       </modules>
    
       <!--groupId 反写的公司网站+项目名称  -->
       <groupId>com.demo.ssm</groupId>
       <!--artifactId 项目名称+模块名称  -->
       <artifactId>demo-ssm</artifactId>
       <!--第一个0表示大版本号
              第二个0表示分支版本号
                第三个0表示小版本号 0.0.1
            snapshot快照 alpha内部测试 beta公测
            Release稳定版本 GA正式发布
        -->
       <version>0.0.1-SNAPSHOT</version>
       <!-- 默认是jar 可以是war jar pom -->
       <packaging>jar</packaging>
       <!--项目描述名称-->
       <name>demo-ssm</name>
       <!--项目地址-->
       <url>www.gseem.com</url>
       <!--项目描述-->
       <description>这是项目描述</description>
       <!--开发者列表-->
       <developers>feiyue</developers>
       <!--项目许可证-->
       <licenses></licenses>
       <!--项目组织信息-->
       <organization></organization>
       <!--项目属性-->
       <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
       
       <!--项目依赖列表-->
       <dependencies>
          <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>4.9</version>
             <type></type>
             <!-- 作用范围 -->
             <scope>test</scope>
             <!-- 设置依赖是否可选-->
             <optional></optional>
             <!-- 排除依赖传递列表 -->
             <exclusions>
                <exclusion></exclusion>
             </exclusions>
          </dependency>
          <dependency>
             <groupId>com.demo.maven</groupId>
             <artifactId>demo.maven</artifactId>
             <version>0.0.1-SNAPSHOT</version>
          </dependency>
       </dependencies>
    
       <!-- 依赖的管理 -->
           <dependencyManagement>
          <dependencies>
             <dependency></dependency>
          </dependencies>
       </dependencyManagement>
    
       <build>
          <!-- 插件列表 -->
          <plugins>
             <plugin>
                <groupId></groupId>
                <artifactId></artifactId>
                <version></version>
             </plugin>
          </plugins>
       </build>
    </project>
    


    本订阅号提供Java相关技术分享,从Java编程基础到Java高级技术,从JavaWeb技术基础Jsp、Servlet、JDBC到SSH、SSM开发框架,从REST风格接口设计到分布式项目实战。剖析主流开源技术框架,用亲身实践来谱写深度Java技术日志。


    Java技术日志微信订阅号

    相关文章

      网友评论

        本文标题:Maven项目的构建与管理

        本文链接:https://www.haomeiwen.com/subject/wdethxtx.html