美文网首页
使用Maven构建Java项目

使用Maven构建Java项目

作者: Lois_Huang | 来源:发表于2019-12-17 19:10 被阅读0次

最近的工作是,在build过程中,查看项目内的依赖信息,例如文件A依赖文件B。
针对Java项目,常见的构建工具有Ant、Maven、Gradle,由于对Maven较为熟悉一点,因此就先用Maven切入。

Maven的简介

Maven是Apache下的一个纯Java开发的开源项目,它是一个项目管理工具,可以使用Maven对Java项目进行依赖管理和构建。

依赖管理

依赖管理即是指——对项目所有依赖的jar包进行规范化管理。

传统项目的依赖管理

传统的项目工程要管理所依赖的jar包完全靠人工进行,程序员从网上下载jar包添加到项目工程中,例如程序员手工将Hibernate、Struts2、Spring的jar添加到工程中的WEB-INF/lib目录下。

手工拷贝jar包添加到工程中的问题是:
1、没有对jar包的版本统一管理,容易导致版本冲突。
2、从网上找jar包非常不方便,有些jar包找不到。
3、jar包添加到工程中会导致工程过大。

Maven项目的依赖管理

Maven项目管理所依赖的jar包不需要手动向工程添加jar包,只需要在pom.xml(Maven工程的配置文件)添加jar包的坐标,即可自动从maven仓库中下载jar包、运行。

使用Maven依赖管理添加jar的好处是:
1、通过pom.xml文件对jar包的版本进行统一管理,可避免版本冲突。
2、Maven团队维护了一个非常全的maven仓库,里边包括了当前使用的jar包,Maven工程可以自动从maven仓库下载jar包,非常方便。

构建

项目构建是一个项目从编写源代码到编译、测试、运行、打包、部署、运行的过程。

Maven项目构建过程:
Maven将项目构建的过程进行标准化,每个阶段使用一个命令完成。

使用maven的好处

除了依赖管理和一步构建外,使用Maven还有另外两个好处。
1、跨平台,可在window、linux上使用。
2、Maven遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本。

Maven的使用

下载Maven

https://maven.apache.org/download.cgi 下载Maven最新版,需要注意下该页面System Requirements中的JDK要求。
解压到本地,在环境变量中添加MAVEN_HOME,值为Maven的安装目录,在Path中添加%MAVEN_HOME%\bin
打开cmd,执行mvn -v命令检查是否安装成功。

配置Maven

Maven仓库

Maven的工作需要从仓库下载一些jar包,例如本地的项目A、项目B等都会通过Maven工具从远程仓库(可以理解为互联网上的仓库)下载jar包并存储在本地仓库(即本地文件夹),当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。

1、本地仓库
用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找。
默认本地仓库位置在 ${user.dir}/.m2/repository${user.dir}表示windows用户目录。

2、远程仓库
如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。
远程仓库可以在互联网内也可以在局域网内。

3、中央仓库
在Maven工具中内置一个远程仓库地址http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。

配置本地仓库

在任意盘符下新建一个目录作为Maven的本地仓库,例如命名为LocalWarehouse。
然后在Maven的安装目录下找到conf文件夹下的settings.xml配置文件,打开此文件配置本地仓库的路径。
查找下面这行代码:

<localRepository>/path/to/local/repo</localRepository>

localRepository节点默认是被注释掉的,需要把它移到注释之外,并修改为:

 <localRepository>D:\software\LocalWarehouse</localRepository> 

如图:

配置镜像

将Maven镜像路径设置为阿里镜像,以便下载速度快。
查找以下代码:

<mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
</mirror>

这一段也是在注释中的,需要将其放到注释外,可以复制出去,修改为以下代码:

<mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>*</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

如图:

创建Maven项目

使用Intellij创建Maven项目。首先在Intellij中设置新项目的Maven配置,File-->Other Settings-->Settings for New Projects。

指定本地Maven的安装目录和settings.xml位置。

再创建Maven项目:
New-->Project-->选择Maven-->Next-->输入GroupId,ArtifactId-->Next-->输入Project location-->Finish。

Maven项目的目录结构

在 Maven 项目的根目录下,有如下必要的目录结构:

  • src
    • main
      • resources「存放项目资源文件」
      • java 「存放项目的.java文件」
    • test
      • resources「存放一些资源文件」
      • java 「存放测试的.java文件」
    • target 「目标文件输出位置,例如.class、.jar、.war文件」
  • pom.xml 「maven项目核心配置文件」

构建命令

Maven命令列表
mvn archetype:generate 创建Maven的普通Java项目
mvn clean 清除maven生成的target目录
mvn compile 编译源代码,一般编译模块下的src/main/java目录。
mvn test 测试命令,执行src/test/java/下junit的测试用例
mvn package 项目打包工具,会在模块下的target目录生成jar或war等文件
mvn install 将打包的jar/war文件复制到本地仓库中,供其他模块使用
mvn deploy 将打包的文件发布到远程参考,提供其他人员进行下载依赖
mvn eclipse:eclipse 将项目转化为Eclipse项目
mvn dependency:tree 打印出项目的整个依赖树

这些命令实际上都由相应的Maven插件来完成。

构建Maven项目

可以利用Intellij IDE来对Maven项目进行管理和构建。

或者使用命令行运行Maven命令,首先定位到Maven项目的目录,也就是项目的pom.xml文件所在的目录。

分析构建日志

此次构建的项目为开源项目depends,执行命令mvn install -X(参数-X表示显示Maven允许的debug信息),并将输出重定向到文本。发现构建日志中主要包含以下内容:

1.  运行环境信息

2.  maven初始化信息

3.  项目的报错或警告信息

4.  REACTOR BUILD PLAN
    包含此次maven命令的任务以及build lifecycle,由于执行的命令为mvn install,故task为install。
    
5.  PROJECT BUILD PLAN
    执行install命令前,需要完成的一系列操作,而这些操作需要绑定相应的maven插件。
    罗列所需要的插件和插件的配置信息(读取pom.xml的<build>中的<plugin>,如果没有进行配置,则采用默认配置),配置中均带有参数。
    注意,第5部分只是一些配置信息,真正的执行在第7部分。
5.1 maven-resources-plugin:resources
    处理源资源文件,一般情况下将src/main/resources下的文件复制到target/classes下。
5.2 maven-compiler-plugin:compile
    编译源文件,一般情况下将src/main/java下的源代码编译成功后放在target/classes下。
5.3 maven-resources-plugin:testResources
    处理测试资源文件,一般情况下将src/test/resources复制到target/test-classes下。
5.4 maven-compiler-plugin:testCompile
    编译测试源文件,一般情况下将src/test/java下的源代码编译成功后放在target/test-classes下。
5.5 maven-surefire-plugin:test
    执行测试文件,依次执行src/test/java下的每一个测试用例,并将每个测试用例的结果放在target/surefire-reports下。
5.6 maven-jar-plugin:jar
    创建jar,放在targets下。
5.7 maven-assembly-plugin
    自定义打包,可以把工程依赖元素、模块等其他文件存放在单个归档文件里。
5.8 maven-install-plugin:install
    安装jar,将创建生成的jar拷贝到本地maven仓库里。
    
6.  分析pom.xml文件里的dependencies
    包括直接引入的jar和该dependency所依赖的jar,形成一颗依赖树。(猜测会在这个步骤下载所需要的jar?
    
7.  完成基本操作
    针对PROJECT BUILD PLAN中的插件名和其配置信息,此处会完成具体的操作。
    首先分析该插件所依赖的jar,引入未被引入的,再对配置中的参数进行具体化,最后执行该插件的功能。
7.1 maven-resources-plugin:resources
    处理源资源文件,将src/main/resources下的文件复制到target/classes下。
7.2 maven-compiler-plugin:compile
    编译源文件,一般情况下将src/main/java下的源代码编译成功后放在target/classes下。
7.3 maven-resources-plugin:testResources
    处理测试资源文件,将src/test/resources下的文件复制到target/test-classes下。
7.4 maven-compiler-plugin:testCompile
    编译测试源文件,将src/test/java下的源代码编译成功后放在target/test-classes下。
7.5 maven-surefire-plugin:test
    执行测试文件,依次执行src/test/java下的每一个测试用例,并将每个测试用例的结果放在target/surefire-reports下。
7.6 maven-jar-plugin:jar
    创建默认的depends-0.9.3.jar,放在targets下。
7.7 maven-assembly-plugin
    自定义打包,根据描述符文件即src/main/assemble/jar-with-dependencies.xml和package.xml,创建depends-0.9.3-jar-with-dependencies.jar和depends-0.9.3-package.zip,放在targets下。
7.8 maven-install-plugin:install
    安装jar,将创建生成的jar等拷贝到本地maven仓库里。
    
8.  build结果信息,显示SUCCESS或FAILURE。

【参考文档】:
1、Maven学习总结(三)——使用Maven构建项目
2、使用 Maven 构建 Java 项目
3、Maven常用命令
4、Maven常用命令大全与pom文件讲解
5、Introduction to the Build Lifecycle
6、MAVEN的安装与配置以及配置MAVEN镜像为阿里云
7、Maven安装及配置
8、Maven安装与配置

相关文章

  • 概述

    maven(几乎所有java项目都使用) maven功能:项目构建、依赖管理maven安装:https://mav...

  • maven运行原理

      maven至今还是Java编程语言构建的事实标准,大部分项目还在使用maven来进行构建,因此了解maven内...

  • maven内部运行原理解析(一)

    maven至今还是Java编程语言构建的事实标准,大部分项目还在使用maven来进行构建,因此了解maven内部运...

  • 通过Maven构建Java项目

    本指南将指导你利用Maven构建一个简单的Java项目。 你所构建 你将使用Maven来构建一个应用程序,它将提供...

  • Maven入门教程

    GitHub仓库:Fundebug/maven-tutorial Maven简介 Maven是Java项目构建工具...

  • 使用 Maven 构建 Java 项目

    Maven 是基于项目对象模型「POM」,可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。本...

  • 使用Maven构建Java项目

    最近的工作是,在build过程中,查看项目内的依赖信息,例如文件A依赖文件B。针对Java项目,常见的构建工具有A...

  • 使用Maven构建Java项目

    本指南将引导您使用Maven构建一个简单的Java项目。 你会建立什么 您将创建一个提供一天中时间的应用程序,然后...

  • maven使用总结

    在java开发中很多项目中会使用maven构建项目,在使用的过程中也遇到了不少的问题,现对maven的一些常用使用...

  • jenkins—maven初试

    jenkins-gitlab容器实验maven构建 构建maven项目,在jenkin容器中安装java以及mav...

网友评论

      本文标题:使用Maven构建Java项目

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