Ma
2021-12-20  2021-12-20    1764 字   4 分钟

一、Maven

1. 理解

 本意:专家 内行。是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理
     
     构建:
     	指我们将一些源码、配置文件、图片视频音频等 作为"源材料""生成"出一个可以运行 可以访问的项目的过程。
     
     构建的环节:
        1.  清理:删除以前的编译,为重新编译做准备
        2.  编译:将Java源码编译成字节码
        3.  测试:针对性的测试,保证正确性
        4.  报告:以标准的格式来记录测试结果
        5.  打包:将项目压缩成可以部署的文件,如:Java项目 jar  Web项目 war
        6.  安装:将打好的包安装到Maven仓库中 以便于其他应用依赖使用
        7.  部署:将打包后的文件 部署到远程仓库或者服务器中运行

2. Maven的作用

- 引入第三方jar:利用Maven引入jar的坐标,根据坐标自动引入jar和依赖jar
- 处理jar之间的依赖关系
- 处理jar之间的冲突
- 项目的分模块开发
- 实现分布式部署

3. Maven的使用

1. 下载 安装 https://maven.apache.org/download.cgi
2. 解压:目录不要过深、不要中文路径
3. 检查 JAVA_HOME 环境变量
4. 配置环境变量
    ① MAVEN_HOME 路径为Maven安装路径
    ② 在Path变量中引入 %MAVEN_HOME%\bin
    
5. 检查
    在doc中 mvn -v
配置Maven本地仓库:
    1. 在本地创建文件夹作为本地仓库(目录不要过深、不要中文路径)
    2. 在Maven配置文件中指定本地仓库地址
    	<localRepository>D:\javaTools3\RepMaven</localRepository> 
            
    3. 在Maven配置文件中指远程仓库地址
       <server>
		<id>huaweicloud</id>
		<username>anonymous</username>
		<password>devcloud</password>
       </server>
       <mirror>
            <id>huaweicloud</id>
            <mirrorOf>*</mirrorOf>
            <url>https://mirrors.huaweicloud.com/repository/maven/</url>
        </mirror>
            
     4. 配置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>   

4. Idea整合Maven

5. 创建Maven项目

#####5.1 创建Java项目

5.2 创建web应用
在Java项目的基础上 安装JBLJavaToWeb 插件 转换一下即可

####6. Maven的核心概念

6.1 POM
	Project Object Model:项目对象模型 ,将整个项目封装成对象便于操作和管理。Maven项目的核心配置文件
6.2 目录结构
 约定 > 配置 > 编码。能使用配置文件解决问题 不编码,能约定的不使用配置文件
     
     项目名
     	src
     		main 
     			java
     			resources
     		test 
     			java
     	pom.xml
6.3 坐标
定位资源的位置
    groupId     公司域名倒写+项目名
    artifactId  当前的模块名
    version     版本号
如:
    <groupId>com.ujiuye.maven</groupId>
    <artifactId>mv_pro1</artifactId>
    <version>1.0-SNAPSHOT</version>
6.4 仓库
① 本地仓库:为当前本机上的maven工程服务
② 远程仓库:本地没有 直接去远程仓库下载
    1. 私服 当前的局域网下的一个范围的仓库
    2. 中央仓库:架设在internet中的 为全世界的Maven工程服务的
    3. 中央仓库镜像:架设在各大洲,减轻中央仓库的压力,更快响应用户的请求

7. Maven构建(生命周期)

lif:生命周期
	clean:清理
	validate:校验
	compile:编译
	test:测试
	package:打包
	verify
	install:安装
	site
	deploy:部署
plugins:插件

8. 依赖管理

#####8.1 依赖的传递性

1. 间接传递  
    项目A 依赖 项目B  项目B依赖junit4.12,项目A也可以直接使用junit4.12
2. 直接传递
    项目B直接在pom中引入junit4.12的依赖
8.2 依赖的传递范围
① compile 编译
    1. main目录下的Java代码可以访问该范围的依赖
    2. test目录下的Java代码可以访问该范围的依赖
    3. 部署到服务器中,运行时放入到WEB-INF/lib目录下
    
② test 
    1. main目录下的Java代码不可以访问该范围的依赖
    2. test目录下的Java代码可以访问该范围的依赖
    3. 部署到服务器中,运行时不会放入到WEB-INF/lib目录下
    如:junit
③ provided
     1. main目录下的Java代码可以访问该范围的依赖
     2. test目录下的Java代码可以访问该范围的依赖
     3. 部署到服务器中,运行时不会放入到WEB-INF/lib目录下
    
 其他:runtime  import  system等
8.3 依赖排除
依赖的原则:
    路径最短者优先原则
    先声明者优先原则
依赖排除:
    <dependency>
            <groupId>com.ujiuye.maven</groupId>
            <artifactId>mv_pro1</artifactId>
            <version>1.0-SNAPSHOT</version>
            <!--依赖排除-->
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
8.4 版本统一管理
1. 声明变量指定版本具体值
    <properties>
        <spring.version>4.1.1.RELEASE</spring.version>
    </properties>
    
2. 使用直接使用变量名
    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

9. 多模块开发

9.1 继承关系
父工程中管理依赖
    <?xml version="1.0" encoding="UTF-8"?>
<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.ujiuye.maven</groupId>
    <artifactId>Parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>Son1</module>
        <module>Son2</module>
    </modules>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>
子工程中 继承父工程管理的依赖
    <?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>Parent</artifactId>
        <groupId>com.ujiuye.maven</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>Son1</artifactId>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>

</project>
9.2 聚合
通过父工程将多个子工程模块 聚合在一起 统一使用统一管理
    <modules>
        <module>Son1</module>
        <module>Son2</module>
    </modules>

二、酷站

如果不知道坐标 可以在该网站搜索
  https://mvnrepository.com/
  https://search.maven.org/

如果有jar文件 但是没有坐标 此时可以将jar文件安装到本地仓库
   mvn install:install-file -Dfile="jar地址" -DgroupId=组ID -DartifactId=项目名 -Dversion=版本号 -Dpackaging打包方式