Maven:项目管理工具软件

一、Maven介绍及加载原理

1.介绍

 

Maven是使用Java语言编写的基于项目对象模型(POM)的项目管理工具。开发者可以通过一小段描述信息来管理项目的构建、报告和文档。

使用Maven可以更好的帮助我们完成项目的管理,具体分类:

依赖管理:

Maven给每个项目提供了一个pom.xml文件,我们可以在其中配置我们需要的第三方资源,当pom.xml文件发生变化的时候Maven会重新加载该配置文件,根据配置信息查找对应的第三方资源并导入到项目中使用。

项目构建:

Maven提供了统一的项目构建方式,从编译到部署,并且操作简单。

插件:

Maven提供了丰富的插件,比如项目打包插件,测试插件,Tomcat插件等等。

 2.Maven加载原理

Maven工具会根据pom模型(pom.xml)加载当前项目需要使用的资源。

每次加载都是从本机某个指定的文件夹去加载。如果本机文件夹中没有这个资源,会从Maven远程服务器中下载到本机文件夹,Maven再去加载本机文件夹中资源。

专业概念: 中央仓库(Central Repository):Maven官方服务器。里面存放了绝大多数市面上流行的jar。也允许用户注册后,上传自己的项目到官方服务器。 本地仓库(Local Repository): 本机的文件夹。 镜像仓库(Mirror Repository):对于国内来说,访问国外的Maven仓库会特别慢。镜像仓库就是另一台备份/复制了中央仓库的服务器。平时使用时国内开发者多使用阿里云镜像或华为云镜像,这样可以大大提升从中央仓库下载资源的速度。 资源坐标:每个Maven需要使用的资源都有一个坐标,通过坐标可以精确告诉服务器需要的是哪个资源由三部分组成: GroupId:一般是逆向公司域名 com.zqwl。同一个公司的GroupId都是相同的。 ArtifactId:一般是项目(jar)名 mysql-connector-java。 Version:版本号 8.0.28。

 

 3.Maven项目的生命周期

Maven有三套相互独立的生命周期(Lifecycle ):

  • Clean Lifecycle:做一些清理工作;

  • Default Lifecycle:构建的核心部分、编译、测试、打包、部署等;

  • Site Lifecycle:生成项目报告、站点、发布站点;

其中Default Lifecycle包含如下阶段:

  • validate - 验证项目是否正确并且所有必要的信息都可用

  • compile - 编译项目的源代码

  • test- 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求打包或部署代码

  • package - 将编译后的代码打包成可分发的格式,例如 JAR。

  • verify - 对集成测试的结果进行任何检查,以确保满足质量标准

  • install - 将包安装到本地存储库中,作为本地其他项目的依赖项

  • deploy - 在构建环境中完成,将最终包复制到远程存储库以与其他开发人员和项目共享

 

        生命周期的每个阶段必须按照严格的执行顺序,当然我们可以执行任意一个阶段,但是每个阶段都会从第一个阶段开始执行。

 4.Maven和Ant对比

Ant和Maven都是Apache的项目管理工具,也都是Java程序非常常用的编译、运行、测试、打包工具。虽然都是项目管理工具,但是因为Maven就是基于Ant研究出来的,可以说Ant有的功能Maven都有,但是Maven有的功能Ant不一定有。

无论是IDEA还是Eclipse,Java项目都默认使用Ant进行项目的管理。在老Ant项目中需要自己添加build文件,但是在目前的java项目中已经不再需要自己进行管理,都是通过idea或eclipse帮助管理即可。

 二、IDEA集成Maven

1.默认配置

IDEA 菜单 File -> Settings -> Build,Execution,Deployment -> Build Tools -> Maven。

IDEA中默认已经集成了Maven(安装IDEA时,IDEA软件里面已经包含了Maven软件,不需要单独下载Maven),可以不用做任何修改。如果想要修改,可以按照图示(1)(2)(3)箭头所指进行修改即可。(建议不修改)

(1)默认IDEA 2019.2.4中集成3.6.1。安装上IDEA已经自带了这个Maven,不需要去官网下载。

(2)User settings file:默认集成Maven的配置文件,请注意此目录。通过勾选(2)箭头所指复选框,可以修改配置文件路径。 ​

(3)Local repository: 本地仓库路径。和配置文件是同一个文件夹。 通过勾选(3)箭头所指复选框,可以修改本地仓库路径。

 三、Maven项目结构详解

1.解释说明

 

 2.pom.xml文件内容说明

创建的Maven项目在pom.xml中默认生成下面内容:

<?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.bjsxt</groupId>
    <artifactId>ideamaven</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>

其中:

<project>是根标签,必须得有的。

<modelVersion> 自动生成,指定pom默认版本。对于Maven 2.x、Maven 3.x中modelVersion必须是4.0.0。

<groupId><artifactId><version> 表示当前项目的坐标,里面信息都是在新建项目时填写的信息。

 四、资源拷贝插件(MyBatis框架必用)

1.项目类型介绍

Maven的项目类型有三种:

jar:相当于我们之前使用idea创建的java项目。打包主要打包.class文件。

war:web项目类型。打包时除了src中内容,还会包含webapp目录,要比jar类型文件打包的内容更多。

pom:聚合项目中使用。聚合项目中如果一个项目为父项目,项目类型应该为pom类型。当项目类型为pom类型时,表示该项目除了会配置pom.xml以外不会有任何其它类或资源文件。

2.如何修改项目类型

 在pom.xml文件中通过<packaging>设置项目类型。

小提示:

pom.xml中默认没有配置<packaging>标签。当没有配置<packaging>时等效于<packging>jar<packaging>

<?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.aaa</groupId>
    <artifactId>firstweb</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>jar</packaging>

</project>

五、使用Maven创建Web项目

1.介绍

使用Maven创建Web项目有两种方式:

(1)创建普通Maven项目,手动添加webapp目录。 ​

(2)使用原型创建Maven项目,手动添加src目录。

1.1创建普通Maven项目
1.2手动添加目录

在src/main下新建webapp/WEB-INF/web.xml。

小提示:

1. webapp目录名称不要写错了,写错了即使在WEB模块进行配置也无效。同时位置也应该放在src/main下,如果放在别的位置,也会出现即使配置了也无效的情况。

2. WEB-INF目录注意全是大写的,单词别写错。

4. web.xml文件在今天授课目录/软件中有,可以直接复制过来。

5. 如果不按照图示进行创建,可能导致最后发布到tomcat后出现404。例如:把webapp建立为web,例如:把webapp放在了src下等路径和名称不一样都可能出现运行后404.

 

1.3添加web模块

        创建的webapp目录默认是不会被编译的,右键点击webapp目录时, 选择New也没有JSP文件。

选择IDEA菜单 File -> Project Structure...

分别点击 Modules -> + -> Web

 1.4编辑web模块

需要修改两处:

(1)Deloyment Descriptors部分,点击右侧修改按钮,选择当前项目的web.xml文件。一定要选当前项目的web.xml。

(2)Web Resource Diectory 部分,需要先选中红色方框部分,才能点击右侧的修改按钮。在弹出框中选择当前项目的webapp目录。

 

 1.5验证

设置了web模块后,会发现项目中webapp前面图标多了一个点(谨记:当且仅当文件夹有这个点时才能新建jsp,才会被编译,如果这个点突然消失了,重复上面的步骤就可以了)。

 2.1新建项目

使用原型创建web项目,在新建项目部分就有区别:

1. 先勾选create from archetype前面的复选框。

2. 然后选择org.apache.maven.archetypes:maven-archetype-webapp

  • 新建项目的剩余步骤都点击Next按钮即可,和不使用原型时创建Maven项目类似。示例中新建的项目叫做mavenweb2.

2.2添加Java目录

使用原型创建的项目自动包含webapp文件夹,且文件夹图标里面有个点,说明已经设置了web模块。里面已经包含了META-INF/web.xml,还自动包含了index.jsp

但是项目里面没有编写Java类的目录,需要手动添加。在src/main下新建java文件夹。

 

2.3设置java目录为资源目录

 当鼠标右键点击java文件夹时,会发现New中没有class这项。说明IDEA并没有识别java文件夹为资源文件夹,需要编辑设置。

2.4验证结果

        设置完成后会发现java目录由灰色变为资源文件夹颜色,鼠标右键点击java目录后在New里面可以发现class选项。     

    

2.5如果创建后控制台报错,找不到资源

解决办法:更换镜像源

  1. 可以先试一下阿里的镜像。去C:\Users\smallming.m2\settings.xml把<mirror>换成阿里的。再次重新创建项目

  2. 如果还是不好使,把settings.xml中<mirror>删除,使用原生镜像进行下载,但是会非常慢。

 六、使用Maven的Tomcat插件发布项目搭配Tomcat中

1.介绍

        Maven带有插件功能,可以把其他软件集成进来,对Maven的功能进行扩展。使用Tomcat插件不需要在本机下载Tomcat软件,由Maven自动下载插件,插件中包含了Tomcat软件

2.配置插件

在项目的pom.xml中配置Tomcat插件。

配置时包含两个步骤:

(1)设置项目类型为war,这个事情后面总有人忘记。如果没有修改成war,运行时控制台会显示BUILD SUCCESS。而不是正常web项目启动日志。

(2)在<build>中添加Tomcat7插件

<?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.bjsxt</groupId>
    <artifactId>mavenweb1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 必须设置项目类型为war -->
    <packaging>war</packaging>

    <build>
        <plugins>
            <!-- Tomcat插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/${project.artifactId}</path><!--发布到Tomcat的名称,即URL访问名称,平时多使用/-->
                    <port>8081</port><!-- 端口,平时多使用80或8080 -->
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
3.启动Tomcat

点击IDEA右侧Maven面板,选择要运行的项目 -> Plugins -> tomcat7 -> tomcat7:run

 

4.观察启动结果

 观察控制台启动结果。可以直接点击URL,会弹出浏览器,点击这个URL,会自动跳出浏览器。

5.关闭和重启的强调

没有关闭Tomcat,再次启动会出现端口号冲突问题

如果当前有一个Tomcat在运行,而又去点击Maven面板的tomcat7:run 会在Run面板上面选项卡又出现了一项,并且在控制台提示端口号冲突。

 

 七、POM模型中的几种关系

1.介绍

在POM模型中定义了三种关系:依赖、继承、聚合。

Maven基于POM模型的项目管理工具,所以这三种关系在Maven中都存在。

2.依赖关系

        当一个项目需要使用到其他项目的内容时,就可以使用依赖。只要依赖的项目(可以是自己的项目,也可以是开源项目)存在于本地仓库,就可以通过pom.xml的<dependency>标签填写坐标实现依赖关系。

查询需要依赖的项目。网址:https://mvnrepository.com/
 

1.配置依赖

需要在pom.xml中添加<dependencies>标签,此标签下面可以有多个<dependency>子标签,表示当前项目所有依赖的项目。

<?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.bjsxt</groupId>
    <artifactId>dependencydemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
    </dependencies>
</project>

 配置后正常可以自动下载,如果没有自动下载可以点击Maven面板左上角的刷新按钮。

 

 2.依赖的传递性
1.解释

        假设项目A依赖项目B,项目B依赖项目C,这时会发现项目A中包含了项目C的依赖,这就是依赖的传递性。

 2.重复依赖问题

        当项目中依赖内容比较多时,可能出现重复依赖的问题,尤其依赖传递性导致的重复依赖。

重复依赖原则:

路径不同间接依赖中maven采用的是路径最短者优先。

路径相同间接依赖中maven采用的是依赖定义顺序从上到下,下边优先级更高。

 3.继承关系
1.介绍

        继承下项目分为父子关系。父项目的<packing>打包方式可以为jar|pom,无论是jar还是pom,子项目只能继承父项目的pom.xml,并不能继承src/main下的内容,所以通常使用pom。

 

<packing></packing>的选项:

  1. pom:往往是作为父项目的角色,在父项目的pom.xml中统一管理子项目的依赖,插件,并不会将代码放到pom工程中。

  2. jar:jar就是我们经常引入的jar包或引入的依赖,本质就是java项目中字节码文件,我们是调用它里面的类,一般的jar包只包含类,配置文件,依赖,插件,不会存在静态资源等。

  3. war:本质就是web项目,跟jar不同的是它可以有静态资源的存在,比如Html,css,图片等等。

2.继承和依赖的区别 
  • 如果想要使用另一个项目的类,这种关系在Maven中叫做依赖。

  • 如果想要使用另一个项目的依赖,插件,这种关系在Maven中叫做继承。

 3.继承管理

        继承关系下父项目的依赖,子项目会全部继承。通过父项目的设置,子类可以选择继承哪些依赖。在父项目中可以通过<dependencyManagement>管理父项目中的依赖,子项目则可以指定继承那些依赖。

        在父项目中可以通过<pluginManagement>管理父项目中的插件,子项目则可以选择继承哪些插件。

 4.聚合关系
1.说明

聚合关系的前提:继承。

好处:在一个父项目中创建多个模块,所有的模块都是独立的,可以独立运行。且父项目不需要install,子模块就可以继承父项目的pom中的依赖。

        在聚合项目中,父项目是pom类型。pom类型项目是否有类或放入资源文件都不会被编译。如果想要追求项目的更加简洁,可以删除父项目的src文件夹。

5.总结(依赖,继承,聚合)
  1. 依赖:

    1. 依赖其它项目中的类,主要是src/main中的类。

    2. 依赖和被依赖的项目都为独立的项目,依赖存在传递性,常用。

    3. 项目必须install后(jar),才能够被其他项目依赖。

  2. 继承:

    1. 父项目管理子项目的依赖,插件。

    2. 父子项目都为独立的项目,springboot开始常用。

    3. 项目必须install后(jar|pom),才能够被其它项目继承。

    4. 无论jar还是pom只能继承依赖,不能使用src/main中的类,常用pom。

  3. 聚合:

    1. 父项目管理子项目的依赖,插件。

    2. 一个项目中创建多个模块(每个模块可以独立运行),微服务常用。

    3. 聚合项目不需要install,每个模块都可以使用父项目中依赖,插件

    4. 聚合项目只能为pom,聚合的父项目需要指定管理哪些子项目。

 八、单元测试

1.介绍

单元测试:独立运行项目中某个或某些方法。

Java中常见的单元测试工具:Junit

在Maven项目中src/main/test包是专门编写单元测试的包。

2.使用​​​​​​​
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.bjsxt</groupId>
    <artifactId>command</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
2.编写测试类

        在类中提供任意方法,方法上添加@Test注解,双击方法名后,鼠标右键点击Run 方法名,运行方法。

/*
单元测试:
    正常情况下,项目应该有一个主方法,通过运行主方法所在类,让整个项目运行起来。

    在项目规格比较大的情况下,如果希望只测试其中某个方法,单独运行一个方法,这时就叫单元测试。
    junit单元适用于非web环境。
 */
public class MyTest {
    /*
    适用于只需要在方法上添加@Test注解。

     */
    @Test
    public void test(){
        System.out.println("test");
    }
    /*
    要求方法必须是public void的,如果不是会出现运行时异常。
     */
    @Test
    public void test123(){
        System.out.println("test2");
    }

    @Before
    public void isbefore(){
        System.out.println("before");
    }
    @After
    public void after(){
        System.out.println("after");
    }
}

九、scope

1.介绍

        在pom.xml中<dependency>标签有一个<scope>子标签,表示当前依赖的域(域:有效范围)。

compile默认值,不配置scope时的取值,表示依赖参与整个项目的编译、打包、测试、发布。也就是说:编译时需要使用、测试时需要使用、最终打包时会包含。属于一种强依赖。
provided仅编译时生效,项目最终被打包时不会包含该依赖。常见servlet的依赖时需要配置。
runtime运行时生效。表示编译时不参与,但是参与项目的测试、打包。该依赖被打包时会被包含。
test仅测试时生效,这个包中的类只能在src/main/test中使用。常用在junit依赖时需要被配置。
system类似provided,但是需要结合systemPath属性,表示依赖不是来源于本地库,而是来源于其他目录。使用较少,在一些特殊项目中才可能被使用。
 2.使用方式

在pom.xml中配置依赖时添加<scope>标签就可以了。

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值