2022/3/26

一、Maven一款开源的项目管理工具
Maven中每一个项目都相当于是一个对象,对象和对象之间是有关系的。关系包含了:依赖,继承,聚合,实现Maven项目可以更加方便的实现导jar包,拆分项目等效果。

二、Maven仓库
基于简单文件系统存储的,集中化关闭Java API资源(构件)的一个服务。
仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中唯一存储路径。得益于Maven的坐标机制,任何Maven项目使用任何一个构件的方式都是完全相同的。
Maven可以再某个位置统一存储Maven项目共享的构件,这个统一的位置就是仓库,项目构件完毕后生成的构件也可以安装或者部署到仓库中,供其他项目使用。
对于Maven来说,仓库分为两类:本地仓库和远程仓库(从远程仓库中拿到放到本地仓库中便于使用)
* 远程仓库:不在本机的就是远程仓库:分为中央仓库和本地私服仓库
远程仓库是指通过各种协议,如file://和http://访问的其他类型的仓库。
其他的也有可能是自己公司的私服,自己公司在局域网搭建的maven仓库,用来在开发团队间共享私有构件和管理发布的。
默认的远程仓库使用的Apache提供的中央仓库:
https://mvnrepository.com/
* 本地仓库:指本机的一份拷贝,用来缓存远程下载,包含尚未发布的临时构件。
* 镜像仓库:仓库A可以提供仓库B的所有内容,A就是B的镜像仓库
        在国内连接中央仓库下载依赖,有时会由于一些特殊原因下载速度非常慢。所以我们可以使用阿里云提供的镜像仓库来替换中央仓库。
* 仓库优先级别:
        最先是本地仓库--> 到配置文件中指定的仓库中--> 有镜像仓库找镜像仓库没有就找中央仓库

三、Maven工程类型
1.POM工程:逻辑工程,用在父级工程后聚合工程中。用来做jar包的版本控制。
2.JAR工程:会打包成jar,用做jar包使用,常见的本地工程-->Java Project
3.WAR工程:将会打包成war,发布在服务器上的工程。
* 创建Maven工程
        GroupID:类似包名
        Atifactld:一般使用项目名字
        Version:版本
* Maven目录结构:
        *src/main/java:这个目录下储存java源代码
        *src/main/resources:储存主要的资源文件。比如xml配置文件和properties文件
        *src/test/java:储存测试用的类,比如JUNIT的测试一般就放在这个目录下面
因为测试类本身实际是不属于项目的,所以放在任何一个包下都显得很尴尬,所以maver专门创建了一个测试包用于存放测试的类
        *src/test:这个下面可以自己创建你,储存测试环境用的资源文件
        *src:包含了项目所有的源代码和资源文件,以及其他项目相关的文件。
        *target:编译后内容放置的文件夹(这个刚创建不显示,需要点击右边的maven/install)

四、maven工具基于POM(项目对象模型)模式实现的
在Maven中每一个项目都相当于是一个对象,他们之间的关系包含了依赖,继承,聚合。

1.依赖关系:
A依赖于B,B注入A(导jar包)
如何注入依赖,pom.xml文件,根元素project下的dependencies标签下可以包含多个dependence元素,声明多个依赖。可以依赖自己项目打包的jar包,也可以依赖中央仓库的,只需要导入jar包坐标即可。
https://mvnrepository.com/artifact/org.mybatis/mybatis  (这里可以找到)

<?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>ln.java</groupId>
    <artifactId>MavenDemo01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
    </dependencies>

</project>

注意:一开始导入中央仓库,却报错了,原因是我一开始就install打包了,所以导入的时候出错,解决办法是clean一下就好了。
依赖的好处:省去了程序员手动添加jar包的操作,省事!并且可以帮我们解决jar包冲突问题。

 依赖的传递性:
如果项目1依赖mybatis工程,项目2依赖项目1,那么项目2也依赖mybatis工程
做法:
1.先将项目1打包,要先清除一下面前的jar,clean一下,再install打包。
2.让项目2 依赖项目1

 <dependencies>
        <dependency>
            <groupId>ln.java</groupId>
            <artifactId>MavenDemo01</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

依赖的两个原则:
1.最短路径优先原则:项目依赖关系树种路径最短的版本会先被使用。
2.最先声明原则:若两个路径一样长,那么则使用在POM.xml中先声明的那个。

排除依赖:若有两个依赖包,想排除一个。则可以使用exclusion标签

<dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
            <exclusions>
                <groupId>ln.java</groupId>
                <artifactId>MavenDemo01</artifactId>
            </exclusions>
        </dependency>
</dependencies>

依赖范围:
1.compile:编译和运行时都生效。(默认)
2.provided:编译和测试的时候。
3.runtime:运行时。
4.system:和provided类似,不过需要指定一个本地系统路径的JAR,通过systemath元素显式地指定依赖文件的路径。
5.test:编译测试代码和运行测试代码的时候。
6.import:只适用于pom文件中的<dependencyManagement>部分
        * 这里表示父工程有这个以后,子工程可以决定父工程用哪个版本的jar
定义一个父工程/打包(继承)

<?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>ln.java</groupId>
    <artifactId>MavenDemo01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <banben>3.5.6</banben>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${banben}</version>
                <scope>import</scope>
            </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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ln.java</groupId>
    <artifactId>MavenDemo02</artifactId>
    <version>1.0-SNAPSHOT</version>

    //父工程
    <parent>
        <groupId>ln.java</groupId>
        <artifactId>MavenDemo01</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../MavenDemo01/pom.xml</relativePath>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.4</version>
        </dependency>
    </dependencies>
</project>

2.聚合关系:
当我们开发的工程用有2个以上模块的时候,每个模块都是一个独立的功能集合。这时候我们需要一个聚合工程。
在创建聚合工程的时候,总的工程必须是一个POM工程。
        * <packaging>pom</packaging>
聚合项目必须是一个pom类型的项目,各子模块可以是任意类型的模块。
前提:继承
聚合包含子继承的特性。
聚合时多个项目的本质还是一个项目,这些项目被一个大的父项目包含。且这时父项目类型为pom类型。同时在父项目的pom.xml中出现<modules>表示包含的所有子模块。

五、编译器插件
1.settings.xml是设置全局的
2.配置编译器插件:pom.xml中可以配置(局部的jdk使用)
3.一般打包只会打包resources包下的配置文件
4.资源拷贝插件:pom.xml中可以配置(配置的路径下的配置文件在打包时也会被打包)
5.Tomcat插件:直接在maven项目中配置即可使用tomcat
Maven -Maven配置tomcat插件 两种 - lilixia - 博客园 (cnblogs.com)

六、Maven常见命令
1.install:mvn install
本地安装,包含编译,打包,安装到本地仓库
编译 -javac
打包 -jar
2.clean:清除已编译的信息,删除工程中的target目录
3.compile:只编译。
4.package:打包,包含编译和打包。
它和Install的区别是它没有把打好的jar包部署到本地仓库和远程仓库。
install把打好的包部署到本地仓库去了,但没有部署远程仓库。

Logo

秉承“创新、开放、协作、共享”的开源价值观,致力于为大规模开源开放协同创新助力赋能,打造创新成果孵化和新时代开发者培养的开源创新生态!支持公有云使用、私有化部署以及软硬一体化私有部署。

更多推荐