Maven 入门使用

 

Maven的作用

  • 依赖管理 jar包下载
  • 构建管理 编译/打包/部署

Maven 获取

  1. 下载地址

在这里插入图片描述

Maven 核心配置文件

  1. 配置文件在解压目录下的conf文件中
    在这里插入图片描述

  2. setting.xml文件解析

<?xml version="1.0" encoding="UTF-8"?>
   
   <settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
    
    
   <!-- 配置本地仓库  默认的值是${user.home}/.m2/repository -->
   	<localRepository>D:/dev/tools/apache-maven-repository</localRepository>
   
   <!-- 如果Maven要试图与用户交互来得到输入就设置为true,否则就设置为false,默认为true。 -->
   	<interactiveMode>true</interactiveMode>
   
   <!-- 如果Maven使用${user.home}/.m2/plugin-registry.xml来管理plugin的版本,就设置为true,默认为false。 -->
   	<usePluginRegistry>false</usePluginRegistry>
   
   <!-- 如果构建系统要在离线模式下工作,设置为true,默认为false。 如果构建服务器因为网络故障或者安全问题不能与远程仓库相连,那么这个设置是非常有用的。 -->
   	<offline>false</offline>
   
   <!-- 配置镜像仓库  -->
     <mirrors>
	   	<!-- aliyun 镜像仓库 -->
	   	<mirror>
	   		<id>nexus-aliyun</id>
	   		<mirrorOf>central</mirrorOf>
	   		<name>Nexus aliyun</name>
           <url>http://maven.aliyun.com/nexus/content/groups/public</url>
       </mirror>
       <!--  maven 官方2号镜像 --> 
       <mirror>
           <id>repo2</id>
           <name>Mirror from Maven Repo2</name>
           <url>http://repo2.maven.org/maven2/</url>
           <mirrorOf>central</mirrorOf>
       </mirror>
       <!--  JBoss 镜像 --> 
       <mirror>
           <id>jboss-public-repository-group</id>
           <mirrorOf>central</mirrorOf>
           <name>JBoss Public Repository Group</name>
           <url>http://repository.jboss.org/nexus/content/groups/public</url>
       </mirror>
     </mirrors>
     <profiles>
   	<!-- JDK版本 -->
   	<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>
     </profiles>
   
   </settings>

Maven 命令

mvn命令需要在pom.xml文件所在的目录的同层级中使用

mvn archetype:generate  创建maven工程

mvn clean   删除target目录

mvn compile 主程序编译
mvn test-compile  测试程序编译

mvn test  执行所有 @Test 方法

mvn package  打包 根据配置生成jar/war包

mvn install  将生成的jar包 安装到本地仓库中,后期可根据dependency  去依赖使用

mvn dependency:tree   查看当前工程的依赖的信息  树形结构
mvn dependency:list   查看当前工程的依赖的信息  列表结构

通过maven命令 生成web工程

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4

pom 解析

<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">
  
  <!-- 代表当前 pom.xml 所采用的结构模板版本 -->
  <modelVersion>4.0.0</modelVersion>

  <!-- 坐标信息  gav
    groupId  公司或者组织的ID    (公司或者组织域名的倒序,通常跟上项目名) 
    artifactId 一个项目或者是项目的一个模块ID   (模块名称) 
    version 版本号   (模块的版本号)
  -->
  <groupId>com.potato.yeb</groupId>
  <artifactId>yeb-server</artifactId>
  <version>1.0-SNAPSHOT</version>
    
  <!-- 当前工程 打包方式 
 	jar: Java 工程
	war: Web 工程
	pom: 当前是父工程 用来管理其他子工程
  -->
  <packaging>jar</packaging>

  <name>yeb-server</name>
  <url>http://maven.apache.org</url>

  <!-- 定义属性值 -->
  <properties>
    <!-- 定义 读取源码使用的字符集 -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <!-- 依赖管理 -->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <!-- 当前依赖的使用范围  test/provided/compile-->
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

依赖

1.依赖范围

标签位置:dependencies/dependency/scope

标签可选值:compile / test / provided / system / runtime / import

默认值:compile

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <!--依赖生效的范围-->
      <scope>test</scope>
    </dependency>
  </dependencies>
----main目录test目录开发过程部署到服务器
compile 有效 有效 有效 有效
test 无效 有效 有效 无效
provided 有效 有效 有效 无效

2.依赖的传递

在这里插入图片描述

解: A是否能使用C ,取决于B依赖C时的设定依赖范围,当使用范围为compile时,A可以使用C的功能

3.依赖的排除

排除:阻断依赖的传递
在这里插入图片描述

如图:

当A依赖B和C, 但是B依赖0.1版本的D,C依赖0.6版本的D,所以当A调用D的功能时,

可能会产生冲突,则需要阻断其中任意一个版本的传递,怎么配置阻断?

假设阻断0.1版本的D依赖
<dependency>
    <groupId>B的groupId</groupId>
    <artifactId>B的artifactId</artifactId>
    <version>B的version</version>
    <scope>compile</scope>
    <exclusions>
        <!-- 被排除依赖的groupId,artifactId,无需写版本号 -->
        <exclusion>
            <groupId>D的groupId</groupId>
            <artifactId>D的artifactId</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4.依赖的继承

继承:工程之间的继承关系,A工程继承B工程

  • B工程 父工程

  • A工程 子工程

    本质上是A工程的pom.xml 配置 继承了 B工程pom.xml的配置

作用: 在父工程中统一管理项目中的依赖信息,具体管理依赖信息的版本 version

创建父工程:

  
  <groupId>com.potato.yeb</groupId>
  <artifactId>yeb</artifactId>
  <version>1.0-SNAPSHOT</version>
<!-- 只有打包方式为pom的工程 才能作为父工程,父工程不写业务代码,只用来管理其他工程 -->
  <packaging>pom</packaging>  
 

创建子工程:

在父工程下 创建子工程 假设创建了三个子工程分别是

yeb-server,yeb-email,yeb-web

配置父子工程的关系:

父工程

<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>

  <groupId>com.potato.yeb</groupId>
  <artifactId>yeb</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!-- **** pom,标志当前工程为父工程 -->
  <packaging>pom</packaging>
  
  <!-- **** 管理的子工程 -->
  <modules>
    <module>yeb-server</module>
    <module>yeb-email</module>
    <module>yeb-web</module>
  </modules>
    
  <!-- 在父工程中统一管理依赖信息
	   在子工程中再进行依赖时无需再填写版本号,也可填写具体想使用的其他版本号-->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.2.12.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.2.12.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.12.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>5.2.12.RELEASE</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  
</project>

子工程 yeb-server

<!--      子工程 yeb-server      -->
<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>com.potato.yeb</groupId>
    <artifactId>yeb</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <!-- 如果子工程的groupId和父工程的一样,可以省略 -->
  <!-- <groupId>com.potato.yeb</groupId>-->
  <!-- 如果子工程的version和父工程的一样,可以省略 -->
  <!-- <version>1.0-SNAPSHOT</version>-->
    
  <artifactId>yeb-server</artifactId>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
</project>

5.配置自定义属性

在父子工程都可以配置,目的是方便版本的统一

<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>

  <groupId>com.potato.yeb</groupId>
  <artifactId>yeb</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  
  <!--自定义属性配置-->
  <properties>
	<!-- 自定义属性标签 -->
    <!-- 标签名:属性名 -->
    <!-- 标签值:属性值 -->
    <!-- 引用方式:${spring.version} -->
    <spring.version>5.2.12.RELEASE</spring.version>
  </properties>
    
  <modules>
    <module>yeb-server</module>
    <module>yeb-email</module>
    <module>yeb-web</module>
  </modules>
    
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <!-- 对自定义属性的调用 -->
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <!-- 对自定义属性的调用 -->
        <version>${spring.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
</project>

Maven 生命周期

作用:为了构建过程自动机完成,Mvean设定了三个生命周期,每一个环节对应构建过程的一个操作

生命周期名称作用各个环节
Clean 清理操作相关 pre-clean
clean
post-clean
Site 生成站点 pre-site
site
post-site
deploy-site
Default 主要构建过程 validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目 main 目录下的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如JAR。
pre-integration-test
integration-test
post-integration-test
verify
install将包安装至本地仓库,以让其它项目依赖。
deploy将最终的包复制到远程的仓库,以让其它开发人员共享;或者部署到服务器上运行(需借助插件,例如:cargo)。
posted @ 2022-09-12 18:11  晓洋^  阅读(44)  评论(0)    收藏  举报