Maven初识

以下内容如有侵权请联系删除

第一章 Maven简介

1.1 Maven是什么?

Maven翻译为"专家"、"内行",是Apache 下的一个纯Java开发的开源项目。

一个对Maven 比较正式的定义是这么说的:

Maven是一个项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的工具。

1.2 Maven能解决什么问题

可以用更通俗的方式来说明。我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种必不可少的事情要做,下面列举几个感受一下:

1.我们需要引用各种jar包,尤其是比较大的工程,引用的jar包往往有几十个乃至上百个,每用到一种jar包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的jar包冲突,版本冲突。

⒉我们写好的java文件,需要通过javac编译成class文件才能交给JVM运行。这项工作可以由各种集成开发工具帮我们完成Eclipse、IDEA等都可以将代码即时编译。

3.世界上没有不存在bug的代码,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。

4.再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起进行打包。如果是web项目,还需要将之发布到服务器。

试想,如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成Web站点,你会心动吗?Maven就可以解决上面所提到的这些问题。

1.3 Maven的两个核心功能【重点】

依赖管理


项目构建

第二章 Maven安装和使用

2.1 Maven下载和安装

配置maven环境变量


2.2 Maven仓库【重点】

Maven仓库的分类

Maven本地仓库的配置

Maven仓库国内镜像配置

修改 maven根目录下的conf文件夹中的setting.xml文件,在mirrors 节点上,添加内容如下:

xml 复制代码
<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
</mirrors>
xml 复制代码
<mirror>
    <id>Central</id>
    <url>http://insecure.repo1.maven.org/maven2/</url>
    <mirrorOf>central</mirrorOf>
</mirror>

2.3 Maven坐标和依赖

2.4 Maven工程的结构【重点】

第三章 Maven生命周期和插件

3.1 Maven常用命令

clean

compile

test

package

install

deploy

maven工程部署命令,将jar或war包部署(上传)到私服中。

3.2 生命周期





3.3 Maven插件

插件如何理解

Maven本质是一个插件执行流程,所有的工作是由插件来完成的。

这意味着 Maven 本身并不懂得如何编译你的代码、如何运行测试、如何打包成 JAR 文件。它只是提供了一个核心框架和一套生命周期。而插件就是具体去执行这些任务的"工具"。

一个生动的比喻

把 Maven 项目构建过程比作建造一栋房子(你的项目):

  • Maven 核心框架:就像是项目经理和标准的建房流程手册。项目经理知道建房的阶段(打地基 -> 砌墙 -> 封顶 -> 装修),但他自己不动手。
  • Maven 生命周期:就是手册里定义的固定阶段,例如 clean(清理工地)、compile(准备材料)、test(结构验收)、package(完成毛坯)、install(交付钥匙)。
  • Maven 插件:就是具体的施工队和工具。
    • maven-compiler-plugin 是编译施工队,负责把 Java 源代码(原材料)编译成字节码(加工好的建材)。
    • maven-surefire-plugin 是测试验收队,负责运行单元测试来检查代码质量。
    • maven-jar-plugin 是打包工具,负责把编译好的类文件、资源文件打包成一个 JAR 文件(毛坯房)。

总结:如何理解Maven插件?

1.核心执行者:Maven 的核心是框架,插件是干活的"工人"。

2.目标与阶段:插件提供具体的"任务",生命周期阶段是"任务清单"上的节点。Maven 通过将任务绑定到节点上来实现自动化构建。

3.高度可配置和扩展:你可以配置现有插件的参数,也可以引入第三方插件(如 Spring Boot 插件、Docker 插件等)来扩展 Maven 的功能,使其不仅能构建 Java 项目,还能管理容器、生成文档、部署应用等。


插件的调用方式

1.通过生命周期调用(最常见):

mvn compile, mvn package, mvn install

这些命令会触发整个生命周期流程,并执行对应阶段绑定的插件目标。

2.直接调用插件目标:

mvn compiler:compile, mvn surefire:test

这种方式直接指定运行某个插件的某个目标,而不管它在生命周期中的位置。常用于快速执行某个特定任务。

手动配置插件

当执行 mvn clean compile test package install 这些基本命令时,Maven 会使用默认插件及其默认配置。

当项目需求与Maven的默认配置不一致时,就需要配置插件了。配置插件本质上是一种"个性化定制"。

例如:
指定JDK版本插件(最常见)

不配置:可能默认用 JDK 1.5 编译,你的 Lambda 表达式会报错。

配置:在 pom.xml 中明确指定使用 JDK 8、11 或 17。

xml 复制代码
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <source>11</source>
    <target>11</target>
  </configuration>
</plugin>

再例如:
maven插件还提供了tomcat插件,这样就不需要安装和配置一个外部的、独立的 Tomcat 服务器,就能直接运行、调试和部署 Web 项目。

xml 复制代码
<project>
  ...
  <packaging>war</packaging> <!-- 打包类型必须是 war -->
  ...
  <build>
    <finalName>mywebapp</finalName> <!-- 决定 WAR 包名称和上下文路径 -->
    <plugins>
      <!-- 配置 Tomcat Maven 插件 -->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version> <!-- 注意版本 -->
        <configuration>
          <!-- 配置服务器端口 -->
          <port>8080</port>
          <!-- 配置应用的上下文路径,如果设为 `/` 则直接通过 http://localhost:8080 访问 -->
          <path>/</path>
          <!-- 以下是部署到外部 Tomcat 时才需要的配置 -->
          <!-- <url>http://remote-server:8080/manager/text</url> -->
          <!-- <server>TomcatServer</server> --> <!-- 对应 Maven settings.xml 中的服务器ID -->
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

3.3 Maven概念模型【了解】

第四章 IDEA创建Maven工程【重点】

4.1 IDEA配置本地Maven环境(全局...)



xml 复制代码
-DarchetypeCatalog=internal -Dfile.encoding=GB2312

4.2 IDEA创建工程

java工程





指定maven环境的jdk版本和字符集模板

xml 复制代码
<build>
    <plugins>
        <!-- 设置编译版本为1.8 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>




Web工程【重点】



4.3 发布web工程

基于idea集成Tomcat软件完成web工程部署

基于maven的Tomcat插件运行web项目

maven的Tomcat插件模板配置:

xml 复制代码
<build>
      <plugins>
          <!-- 设置编译版本为1.8 -->
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.1</version>
              <configuration>
                  <source>1.8</source>
                  <target>1.8</target>
                  <encoding>UTF-8</encoding>
              </configuration>
          </plugin>
            <!--配置maven的Tomcat插件-->
          <plugin>
              <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat7-maven-plugin</artifactId>
              <version>2.2</version>
              <configuration>
                  <port>8080</port>
                  <path>/</path>
                  <uriEncoding>utf-8</uriEncoding>
              </configuration>
          </plugin>
      </plugins>
  </build>

4.4 依赖管理


4.5 IDEA设置maven打包的jar包名称

第五章 Maven中pom、jar、war三种打包方式区别

第六章 Maven高级

6.1 依赖传递

6.2 依赖冲突和解决办法

依赖冲突:由于依赖的传递特性,导致依赖jar包的导入混乱,可能导致项目出现问题。

解决方法:约定俗称,排除依赖,锁定版本

约定俗称


排除依赖

锁定版本

锁死版本号,避免版本号冲突

1、定义公共版本号

2、锁定版本

3、导入依赖

xml 复制代码
<!--
    锁定版本号
        1、定义公共版本号
        2、锁定需要依赖的版本号(锁定版本,不会真正的引入依赖)
        3、引入坐标依赖
 -->

<!-- 1、定义公共版本号-->
<properties>
    <!--自定义版本号常量-->
    <spring.version>5.1.6.RELEASE</spring.version>
</properties>

<!--2、锁定需要依赖的版本号-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <!--引入常量:${常量名}-->
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<!--3.引入依赖(不能写版本号)-->
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
    </dependency>
</dependencies>

6.3 聚合工程


第七章 maven私服(了解)

7.1 私服下载安装

7.2 私服的安装和启动

7.3 私服中仓库的种类

7.4 将本地的工程打包存入私服

(1)找到maven的setting.xml配置文件,设置私服访问密码

xml 复制代码
<servers>
	<!--对应三个宿主仓库中 -->
	<server>
		<id>releases</id>
		<username>admin</username>
		<password>admin123</password>
	</server>
	<server>
		<id>snapshots</id>
		<username>admin</username>
		<password>admin123</password>
    	</server>
	<server>
		<id>thirdparty</id>
		<username>admin</username>
		<password>admin123</password>
	</server>
  </servers>

(2)找到带上传工程pom.xml配置文件,设置需要上传到的服务路径

xml 复制代码
<distributionManagement>
		<repository>
			<id>releases</id>
			<url>http://localhost:8081/nexus/content/repositories/releases/</url>
		</repository>
		<snapshotRepository>
			<id>snapshots</id>
			<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
		</snapshotRepository>
	</distributionManagement>

(3)执行maven命令上传--deploy

7.5 从私服下载jar包

(1)在maven安装目录的conf文件中的settings配置文件中配置profile

xml 复制代码
<profile> 
		<!--profile的id -->
		<id>dev</id>
		<repositories>
			<repository> <!--仓库id,repositories可以配置多个仓库,保证id不重复 -->
				<id>nexus</id> <!--仓库地址,即nexus仓库组的地址 -->
				<url>http://localhost:8081/nexus/content/groups/public/</url> <!--是否下载releases构件 -->
				<releases>
					<enabled>true</enabled>
				</releases> <!--是否下载snapshots构件 -->
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</repository>
		</repositories>
		<pluginRepositories> <!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
			<pluginRepository> <!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
				<id>public</id>
				<name>Public Repositories</name>
				<url>http://localhost:8081/nexus/content/groups/public/</url>
			</pluginRepository>
		</pluginRepositories>
	</profile>

(2)在maven安装目录的conf文件中的settings配置文件中激活profile

xml 复制代码
	<activeProfiles>
		<activeProfile>dev</activeProfile>
	</activeProfiles>

第八章 将第三方jar存入本地仓库或者私服

8.1 安装第三方jar包到本地仓库

进入jar包所在目录运行

复制代码
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile=fastjson-1.1.37.jar -Dpackaging=jar

打开cmd直接运行

复制代码
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=C:\my_java\授课资料\资料:maven【高级】\安装第三方jar包\fastjson-1.1.37.jar

8.2 安装第三方jar包到私服

(1)在settings配置文件中添加登录私服第三方登录信息

复制代码
<server>
<id>thirdparty</id>
<username>admin</username>
<password>admin123</password>
</server>

(2)进入jar包所在目录运行

复制代码
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty

(2)打开cmd直接运行

复制代码
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=C:\my_java\授课资料\资料:maven【高级】\安装第三方jar包\fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty

8.3 图形化安装第三方jar包到私服


如果上传的jar包有pom文件

相关推荐
harmful_sheep3 小时前
maven mvn 安装自定义 jar 包
java·maven·jar
zjjuejin8 小时前
Maven 现代开发流程的集成
java·后端·maven
牧羊人_myr14 小时前
Maven核心功能与项目构建详解
java·maven
yunmi_15 小时前
安全框架 SpringSecurity 入门(超详细,IDEA2024)
java·spring boot·spring·junit·maven·mybatis·spring security
肥肠可耐的西西公主2 天前
后端(JavaWeb)学习笔记(CLASS 1):maven
笔记·学习·maven
Li_7695322 天前
2025.2.X 版本 IDEA maven 打包乱码问题的解决
java·maven·intellij-idea
小满、2 天前
什么是Maven?关于 Maven 的坐标、依赖管理与 Web 项目构建
java·maven
yunmi_2 天前
Spring Cloud Netfilx -- Ribbon:负载均衡工具(代码示例)
spring cloud·ribbon·maven·负载均衡
还是鼠鼠3 天前
《黑马商城》微服务保护-详细介绍【简单易懂注释版】
java·spring boot·spring·spring cloud·sentinel·maven