Maven入门

Maven入门

是Apache开发的一个工具,用来管理Java项目,依赖管理,项目构建

Maven的作用

  • 依赖管理:Maven对项目的第三方构建(jar包)进行统一管理,向工程中加入jar包不需要手工从其他地方拷贝,通过Maven定义jar包的坐标,自动从Maven仓库中下载到工程中
  • 项目构建:Maven提供一套对项目周期管理的标准,开发人员和测试人员统一使用Maven进行项目构建,项目生命周期管理:编译、测试、打包、部署、运行
  • Maven对工程分模块构建,提高开发效率

Maven中存放的内容

  • Maven自身运行所需的插件
  • 第三方框架和工具类的jar包
  • 我们自己开发的Maven项目安装后的jar包

Maven的坐标

Maven的核心作用就是管理项目的依赖,引入我们所需的各种jar包,在Maven中,无论是一个依赖,插件或者项目构件的输出,都能够称之为构件

为了能够自动化解析任何一个Java构件,Maven必须将这些jar包或者其他资源进行唯一标识,这是管理项目的依赖基础,也就是坐标,坐标的定义元素如下:groupid(一般为公司组织名称), artifactid(项目名称), version(版本)

Maven仓库

Maven仓库有三种类型:

  • 本地仓库,在你第一次运行任何 maven 命令的时候创建的,Maven 本地仓库保存你的工程的所有依赖(library jar、plugin jar等)。当你运行一次 Maven 构建,Maven 会自动下载所有依赖的 jar 文件到本地仓库中。它避免了每次构建时都引用远程机器上的依赖文件
  • 中央仓库,Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量也是最全面的常用的资源
  • 远程仓库,如果 Maven 在中央仓库中也找不到依赖的库文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的库文件

 

解决Marven test时出现Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile)的错误

造成原因:新建Maven项目时,jre默认使用的12,改成1.8后(即与jdk一致),即可运行

⚠️  测试报告里不要使用中文,否则会乱码

 

创建Servlet项目

点击File->New->Project ,选择Maven工程,注意选择以webapp结尾的maven项目

修改项目的包名

然后修改Maven配置文件地址和Maven仓库地址

由于默认创建的工程没有java、等文件,自己把相关文件夹和包创建一下

然后添加Tomcat插件

<plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <port>80</port>
          <path>/MyServlet</path>
        </configuration>
      </plugin>
</plugins>

配置Html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>TIM's First Web</h1>
</body>
</html>

 运行Tomcat

成功

 

然后Java文件下新建Servlet

发现会报错,此时应该导入Servlet

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

这时候简单实现Servlet.java文件

@WebServlet(name = "Servlet")
public class Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("doPost");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

但是发现,在点进Servlet后会报404的错

Debug了很久,发现能导致404的原因五花八门,在经过一番尝试后发现,问题出在@WebServlet语句,将其更改为

@WebServlet(name="Servlet",urlPatterns={"/Servlet"})

后,就能成功运行了

Maven常见命令

  1. clean    删除target/
  2. test       test case junit/testNG
  3. package 打包
  4. ​​​install    把项目install到local repo
  5. deploy    发本地jar发布到remote

Maven依赖

依赖是Maven 中最关键的部分,我们之所以在工程中使用Maven,就是因为它的依赖管理功能。如果我们想要在工程中引入某个jar 包,只需要在pom.xml 中引入其jar 包的坐标即可,Maven 通过groupIdartifactIdversion三个向量来定位Maven 仓库其jar 包所在的位置,并把对应的jar 包引入到工程中来

依赖传递的范围:根据Jar包的不同,需要为其设置不同的传递方式,即传递范围。Maven中的依赖传递范围设置在<scope>标签中。它提供了六种依赖的范围:compiletestprovidedruntimesystem 和import,其中compile 是默认的依赖范围。

依赖关系的分类:

A.直接依赖:项目A要用到别的项目B的架构的东西,所以项目A直接依赖B项目

B.间接依赖:项目B依赖A,C依赖B,那么C间接依赖A

C.依赖传递性:Maven的依赖是具有传递性的,比如A->B,B->C,那么A间接的依赖于C,这就是依赖的传递性,其中A对于B是第一直接依赖,B对于C是第二直接依赖,C为A的传递性依赖。

D.可选依赖与排除依赖:传递性依赖会给项目隐式的引入很多依赖,这极大的简化了项目依赖的管理,但是有些时候这种特性也会带来问题,它可能会把我们不需要的jar包也引入到了工程当中,使项目结构变得更复杂。或者你想替换掉默认的依赖换成自己想要的jar包,这时候就需要用到依赖排除。
 

Maven的继承与聚合

Maven的聚合特性:可以帮助我们把项目的多个模块聚合在一起,使用一条命令进行构建,即一条命令实现构建多个项目;

Maven的继承特性:可以将各个模块相同的依赖和插件配置提取出来,在简化POM的同时还可以促进各个模块配置的一致性。

聚合和继承的关系:虽然聚合模块和父模块经常合二为一,但是聚合和继承是两个不同的概念,其实是没有什么关系的。聚合模块知道它聚合了哪些模块,但是被聚合的模块不知道聚合模块的存在;父模块不知道子模块的存在,但是子模块都必须知道自己的父模块是谁。

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值