Maven基础知识总结

maven是什么?

Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。 当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。

maven采用**约定优于配置(Convention Over Configuration)**理念,比如源码、单元测试、class文件等存放的目录都采用约定目录。
在没有自定义的情况下,源代码假定是在src/main/java,资源文件假定是在src/main/resources。测试代码假定是在src/test 。项目假定会产生一个 JAR 文件。Maven假定你想要把编译好的字节码放到target/classes 并且在target 创建一个可分发的 JAR 文件

安装maven

maven是基于java实现的,因此依赖本机安装java,推荐安装maven3.X版本,jdk一般需要1.8+版本。
安装比较简单,安装完jdk之后从官网http://maven.apache.org/download.html.下载maven二进制包安装即可。
安装完成之后命令行执行mvn -v能正常输出类似返回即可
mvn -v返回

配置maven

图片来源:https://zhuanlan.zhihu.com/p/73444114
maven的依赖下载顺序是先访问本地仓库,若有则直接使用。若本地仓库没有会从私服/私库下载,仍下载不到会从远程/共享仓库下载。
默认的远程仓库为http://repo1.maven.org/maven2/,由于墙的原因一般下载会很慢,可以通过mirror的方式替换。
公司有自建的nexus做私服的话可以配置私服为依赖包下载的地址,避免了从公网下载以便加快下载速度。
一份示例的maven的setting文件,在maven安装目录的conf/settings.xml

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <!-- 本地仓库路径 -->
  <localRepository>C:\Program Files\apache-maven-3.6.3-bin\repo</localRepository>

  <!-- 一般无需添加,留空即可 -->
  <pluginGroups>
    <pluginGroup>org.jenkins-ci.tools</pluginGroup>
  </pluginGroups>

  <!-- <proxies>
	 <proxy>
		 <id>myproxy</id>
		 <active>true</active>
		 <protocol>http</protocol>
		 <host>proxy.somewhere.com</host>
		 <port>8080</port>
		 <username>proxyuser</username>
		 <password>somepassword</password>
		 <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
	 </proxy> -->
  </proxies>

  <servers>
  <!-- 需要本地上传包到私服才需要配置 -->
  </servers>

  <mirrors>
    <mirror>
          <id>alimaven</id>
          <name>aliyun maven</name>
          <!--国内的代理仓库,避免去中央仓库下载,加快速度 -->
          <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
          <!-- 被镜像的服务器的id。如果要设置一个Maven中央仓库(http://
repo1.maven.org/maven2)的镜像,就需要将该元素设置成central-->
          <mirrorOf>central</mirrorOf>        
    </mirror>
    <mirror>
      <id>repo.jenkins-ci.org</id>
      <url>http://repo.jenkins-ci.org/public/</url>
      <mirrorOf>m.g.o-public</mirrorOf>
    </mirror>
  </mirrors>

  <profiles>
    <profile>
    	<id>jdk-1.8</id>
    	<activation>
    		<activeByDefault>true</activeByDefault>
    		<jdk>1.8</jdk>
    	</activation>
    	<properties>
			<maven.compiler.source>1.8</maven.compiler.source>
			<maven.compiler.target>1.8</maven.compiler.target>
			<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
		</properties>
    </profile>
    <profile>
      <id>nexus</id>
       <!-- 远程仓库列表 -->
      <repositories>
        <repository>
          <id>nexus</id>
          <name>nexus</name>
         <!-- 虚拟的URL形式,指向镜像的URL-->
         <!-- 替换成具体私服地址 -->
          <url>http://xxx.xxx.xxx.xxx/repository/maven-public/</url>
          <layout>default</layout>
         <!-- 表示可以从这个仓库下载releases版本的构件-->  
          <releases>
            <enabled>true</enabled>
          </releases>
         <!-- 表示可以从这个仓库下载snapshot版本的构件 -->  
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
       <!-- 插件仓库列表 -->
      <pluginRepositories>
        <pluginRepository>
          <id>nexus</id>
          <name>nexus</name>
          <!-- 替换成具体私服地址 -->
          <url>http://xxx.xxx.xxx.xxx/repository/maven-public/</url>
          <layout>default</layout>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
          <releases>
             <enabled>true</enabled>
          </releases>
        </pluginRepository>
      </pluginRepositories>
    </profile>

    <!-- Give access to Jenkins plugins -->
    <profile>
      <id>jenkins</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <repositories>
        <repository>
          <id>repo.jenkins-ci.org</id>
          <url>http://repo.jenkins-ci.org/public/</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>repo.jenkins-ci.org</id>
          <url>http://repo.jenkins-ci.org/public/</url>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>

  <activeProfiles>
    <!-- 声明哪些profile是激活的 -->
    <activeProfile>nexus</activeProfile>
    <activeProfile>jdk-1.8</activeProfile>
    <activeProfile>jenkins</activeProfile>
  </activeProfiles>
</settings>

maven核心概念

maven生命周期

本小节整理参考地址
每个项目都要进行清理、编译、测试、打包以及安装部署,这些就是生命周期。构建生命周期具体步骤包括清理、初始化、编译、测试、打包、集成测试、验证、部署和生成站点。这些步骤几乎适合所有的项目,也就是说,所有项目的管理构建过程都可以对应到这个生命周期上来。
maven根据实际情况抽象提炼出来的一个统一标准和规范作为生命周期,但maven是不做具体事情的,而是由一个个插件来实现的。 在项目的构建过程中,只是在方向和步骤上面起到了管理和协调的作用。

Maven 拥有三套独立的生命周期,它们分别是 clean、default 和 site(不常用)。clean 生命周期的目的是清理项目;default 生命周期的目的是构建项目;site 生命周期的目的是建立项目站点。

每个生命周期又包含了多个阶段。这些阶段在执行的时候是有固定顺序的。后面的阶段一定要等前面的阶段执行完成后才能被执行。

比如 clean 生命周期,它就包含 pre-clean、clean 和 post-clean 三个阶段。用户调用 pre-clean 时,只有 pre-clean 阶段被执行;调用 clean 时,先执行 pre-clean,再执行 clean 阶段;同理,当调用 post-clean 时,Maven 自动先执行 pre-clean、再执行 clean,最后执行 post-clean。
1. clean 生命周期
clean 生命周期的目的是清理项目,它包括以下三个阶段。 但是一般执行命令是mvn clean,不需要关心三个阶段的先后顺序,知道它会清理项目编译的target目录即可

  • pre-clean:执行清理前需要完成的工作。
  • clean:清理上一次构建过程中生成的文件,比如编译后的 class 文件等。
  • post-clean:执行清理后需要完成的工作。
    2. default 生命周期
    default 生命周期定义了构建项目时所需要的执行步骤,它是所有生命周期中最核心部分,比较常用的阶段如下
  • compile 编译项目中的源代码
  • test-compile 编译测试代码
  • test 运行测试案例
  • package 将编译后的 class 和资源打包成压缩文件,比如 rar
  • verify 检测测试后的包是否完好
  • install 将打包的组件以构件的形式,安装到本地依赖仓库中
  • deploy 运行集成和发布环境,将测试后的最终包以构件的方式发布到远程仓库中,方便所有程序员共享
    各阶段的详细介绍内容可以参考链接
    http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
    3. site 生命周期(不常用,看下即可)
    site 生命周期的目的是建立和发布项目站点。Maven 可以基于 pom 所描述的信息自动生成项目的站点,同时还可以根据需要生成相关的报告文档集成在站点中,方便团队交流和发布项目信息。site 生命周期包括如下阶段。
    pre-site:执行生成站点前的准备工作。
    site:生成站点文档。
    post-site:执行生成站点后需要收尾的工作。
    site-deploy:将生成的站点发布到服务器上。

maven坐标

Maven通过坐标来精确定位一个项目。maven通过groupId:artifactId:packaging:version来唯一定义一个项目对象模型(POM)

  • groupId:公司,组织的标识,约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。来自Sonatype的项目有一个以com.sonatype开头的groupId
  • artifactId:在groupId下的表示一个单独项目的唯一标识符
  • version:一个项目的特定版本
  • packaging:项目的类型,默认是jar,还有pom类型

创建简单的maven项目

创建项目

可以用原始的 mvn archetype:create创建骨架项目,也可以用idea或eclipse在界面创建。推荐用idea创建,创建项目,选择项目类型
创建项目
输入项目名,就会在后台创建(默认会从中央仓库下载,比较慢)
在这里插入图片描述

#执行项目编译
mvn clean compile

添加依赖

在项目的dependencies中新增一个依赖
在这里插入图片描述
依赖具体坐标可以在maven终于仓库搜索https://mvnrepository.com/,根据实际情况选择
在这里插入图片描述
多模块maven项目,默认的maven项目只有一个module,在实际工作中通常会将项目按功能或实现方式拆分成几个子模块,由根目录下的pom.xml统一管理,但是管理上还是以一个仓库的维度,比如各子模块都依赖的公共依赖,就放在父模块中,各子模块只需在parent的依赖的基础上再添加自定义依赖
图片截取自maven权威指南

依赖管理 (Dependency Management)

maven的依赖是传递的,比如你依赖了spring的某个包,不需要关心它的依赖,maven编译打包时会自动下载。项目A依赖于项目B和C,项目B依赖于项目D,项目C依赖于项目E,但是项目A所需要做的只是定义对B和C的依赖。
maven也提供了不同的依赖范围(dependency scope)。比如项目的pom.xml包含了一个依赖junit:junit:jar:4.12其范围是test。当一个依赖的范围是test的时候,说明它在Compiler插件运行compile目标的时候是不可用的。它只有在运行compiler:testCompile和surefire:test目标的时候才会被加入到classpath中。

对应上面的多模块项目,当需要由父项目指定依赖的插件和版本时,通过dependencyManagement来实现,这样子模块依赖由dependencyManagement声明的依赖时,版本号只能是parent里的dependencyManagement声明的组件版本
图片截取自maven权威指南
可以通过 mvn dependency:tree命令查看当前项目的依赖树
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 学习 Maven 需要有一定的 Java 编程基础,对于 Maven 的概念和使用方式也需要有一定的了解。另外,需要了解如何编写和管理项目依赖,以及如何使用 Maven 插件等。如果你之前没有接触过 Maven,建议先了解一些基本的概念和使用方法,例如 Maven 的生命周期、坐标、仓库等。 ### 回答2: 学习Maven需要一些基础知识。首先,需要了解Java编程语言和软件开发的基本概念和原理,以便理解Maven的作用和使用方式。其次,需要熟悉命令行操作以及基本的项目管理和构建知识,这有助于更好地使用Maven进行项目构建和管理。另外,了解项目构建管理工具的基本概念和工作原理也是必要的,这样能更好地理解Maven的工作方式和特点。最后,掌握XML的基本知识也是必要的,因为Maven项目的配置文件pom.xml采用XML格式进行编写和管理。当然,对于初学者来说,这些基础知识可以通过学习和实践逐步掌握,同时也可以通过查阅相关的文档和资料来加深理解。总之,学习Maven需要一些基础知识,但通过积极学习和实践,初学者也能逐步掌握并运用好这个项目构建管理工具。 ### 回答3: 学习Maven并不需要太多的基础知识,但有一些基本的编程和项目管理概念对于理解和使用Maven是很有帮助的。 首先,对Java编程语言有一定的了解是必要的,因为Maven主要用于构建和管理Java项目。了解Java的基础语法、面向对象编程原理以及常用的Java开发工具,能更好地理解和使用Maven。 其次,对于项目管理的基本概念也是必备的。Maven是一个强大的项目管理工具,能够帮助我们自动化构建、测试、打包和部署项目。了解项目的生命周期、依赖管理、版本控制以及发布流程等概念,可以更好地理解和使用Maven的各种功能。 另外,了解一些常用的构建工具和持续集成工具也是有益的。Maven与其他构建工具(如Ant)和持续集成工具(如Jenkins)有很好的兼容性和集成性,对它们有一定的了解可以更好地搭配使用Maven进行项目构建和持续集成。 总结来说,学习Maven需要有一定的Java编程基础、项目管理概念以及对一些相关的构建和持续集成工具的了解,这样才能更好地理解和使用Maven的各种功能,提高项目管理和开发的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值