Maven入门

Maven入门

一、目前掌握的技术
在这里插入图片描述二、目前技术存在的问题

  1. 一个项目就是一个工程,对于大的项目来说,层次很乱,不适合用package划分模块;
    要让每个模块对应一个工程,有利于分工,只有借助Maven才能实现
  2. 项目中需要的jar包需要手动"复制粘贴"到WEB-INF/lib目录下;
    同样的jar包重复出现在不同的项目工程中,一方面浪费存储空间,另一方面也让工程比较臃肿。
    借助Maven可以将jar包仅仅保存在仓库中,有需要使用的工程,“引用”该文件接口,不需要复制jar包。
  3. jar包需要别人写好,或者在官网上下载;
    借助Maven可以以一种规范的方式下载jar包,所有知名框架或者第三方工具的jar包以及按照统一的规范存放在Maven的中央仓库中。
  4. 一个jar包依赖的其他jar包需要手动加入项目。

三、Maven是什么?

  1. 是一款服务于java平台的自动化构建工具。
  2. 构建: 是以java源文件、框架配置文件、JSP、HTML、图片等资源为原材料,去生产一个可以运行的项目的过程。
    编译—>部署—>搭建

四、Maven四大特性

1. 依赖管理系统

<dependency>
  	<groupId>javax.servlet</groupId>
    	<artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version>
</dependency>

groupld: 定义当前Maven项目隶属的实际项目-公司名称
artifactId: 定义实际项目中一个Maven模块-项目名
version: 定义Maven项目当前所处版本

2. 多模块结构
3. 一致的项目结构
4. 一致的构建模型和插件机制

五、Maven的安装配置

  1. 检查JDK版本,1.7以上
    在这里插入图片描述 2. 下载Maven
    https://maven.apache.org/download.cgi#files
    在这里插入图片描述3.配置Maven环境变量
    在这里插入图片描述在这里插入图片描述注: maven的解压路径中不能含有中文字符和空格
    在这里插入图片描述在这里插入图片描述4.检查是否配置成功
    打开dos窗口,输入 mvn -v ,能够打印出下面的信息,则表示配置成功。
    在这里插入图片描述六、Maven项目的目录结构
    手动创建一个基本的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>org.example</groupId>
    <artifactId>maven02</artifactId>
    <version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
    <name>maven02</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

七、修改jar包下载地址,更改镜像源
在这里插入图片描述找到解压的conf文件夹,修改settings.xml的内容,
1.修改jar包下载路径在这里插入图片描述2.修改镜像源
在这里插入图片描述将jar包下载到修改的目录文件下。
在这里插入图片描述八、常用的Maven命令
Maven的命令格式:mvn [plugin-name]:[goal-name]
执行 plugin-name 插件的 goal-name 目标
在这里插入图片描述1.-D 传入属性参数 mvn package -Dmaven.test.skip=true
以 -D 开头,将 maven.test.skip 的值设为 true ,就是告诉maven打包的时候跳过单元测试。 mvn deploy-Dmaven.test.skip=true 代表部署项目并跳过单元测试。
2. -P 使用指定的Profile配置
profiles 定义了各个环境的变量 id , filters 中定义了变量配置文件的地址,其中地址中的环境变量就是上面 profile 中定义的值, resources 中是定义哪些目录下的文件会被配置文件中定义的变量替换。
九、Maven创建java项目
!](https://img-blog.csdnimg.cn/b6376ba153f74d8bb1d7520b5629136f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pW36KGNemdm,size_20,color_FFFFFF,t_70,g_se,x_16)
在这里插入图片描述在这里插入图片描述点击运行即可
十、Maven创建Web项目
在这里插入图片描述在这里插入图片描述创建成功后修改pom.XML文件
在这里插入图片描述删除pluginManagement标签

<!-- 将这个标签及标签中的内容全部删除 -->
<pluginManagement>
...
</pluginManagement>

添加web部署插件
在 build 标签中添加 plugins 标签

  1. Jetty插件
<!-- 设置在plugins标签中 -->
<plugin>
 <groupId>org.mortbay.jetty</groupId>
 <artifactId>maven-jetty-plugin</artifactId>
 <version>6.1.25</version>
 <configuration>
 <!-- 热部署,每10秒扫描⼀次 -->
 <scanIntervalSeconds>10</scanIntervalSeconds>
 <!-- 可指定当前项⽬的站点名 -->
 <contextPath>/test</contextPath> 
 <connectors>
 <connector
implementation="org.mortbay.jetty.nio.SelectChannelConnector">
 <port>9090</port> <!-- 设置启动的端⼝号 -->
 </connector>
 </connectors>
 </configuration>
</plugin>
  1. Tomcat插件
<plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <port>8081</port> <!-- 启动端⼝ 默认:8080 -->
          <path>/test</path> <!-- 项⽬的站点名,即对外访问路径 -->
          <uriEncoding>UTF-8</uriEncoding> <!-- 字符集编码 默认:ISO-8859-1 -->
          <server>tomcat7</server> <!-- 服务器名称 -->
        </configuration>
      </plugin>

运行项目在这里插入图片描述也可通过jetty:run-Djetty.port=8899命令自定义端口
还可以用过tomcat7:run命令运行
十一、Maven仓库的使用
https://mvnrepository.com/
Maven官网中搜索需要使用的jar包
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述十二、Maven环境下构建多模块项目

  1. 创建父类项目,不选择模板,直接next
    在这里插入图片描述2.填写项目信息在这里插入图片描述3.在父模块上创建子模块
    maven_dao模块在这里插入图片描述在这里插入图片描述在这里插入图片描述
    maven_service模块
    在这里插入图片描述maven_controller模块
    在这里插入图片描述 4.修改pom.XML中的配置文件,同第十步。
    5.设置模块依赖关系
    (1)在maven_dao模块中新建dao包,创建UserDao类
    在这里插入图片描述(2)在maven_service中创建service包,创建UserService类,调用UserDao中的方法,必须要先引入UserDao的依赖。在这里插入图片描述
 <!--引入maven_dao模块中的依赖-->
       <dependency>
            <groupId>com.zgf</groupId>
            <artifactId>maven_dao</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>

(3)在maven_controller模块中创建com.zgf.controller包,创建UserServlet类,引入相关依赖。
在这里插入图片描述

<!--引入maven_service模块的依赖-->
        <dependency>
            <groupId>com.zgf</groupId>
            <artifactId>maven_service</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>

        <!--引入servle依赖-->
        <!-- 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>
        <dependency>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>servlet-api-2.5</artifactId>
            <version>6.1.4</version>
            <scope>compile</scope>
        </dependency>

(4)添加tomcat插件,运行项目

<!-- 添加插件 -->
<plugins>
 <!-- tomcat7插件 -->
 <plugin>
 <groupId>org.apache.tomcat.maven</groupId>
 <artifactId>tomcat7-maven-plugin</artifactId>
 <version>2.1</version>
 <configuration>
 <!-- <port>8080</port> -->
 <path>/web</path>
 <uriEncoding>UTF-8</uriEncoding>
 <server>tomcat7</server>
 </configuration>
 </plugin>
</plugins>

十三、Maven打包操作

  1. 创建Web项目,建立对应的目录结构
    在这里插入图片描述2.添加Profile配置
<!-- 打包环境配置 开发环境 测试环境 正式环境 -->
  <profiles>
      <profile>
        <id>dev</id>
          <properties>
            <env>dev</env>
          </properties>
        <!-- 未指定环境时,默认打包dev环境 -->
        <activation>
          <activeByDefault>true</activeByDefault>
        </activation>
      </profile>
    <profile>
      <id>test</id>
      <properties>
        <env>test</env>
      </properties>
    </profile>
    <profile>
      <id>product</id>
      <properties>
        <env>product</env>
      </properties>
    </profile>
  </profiles>

3.设置资源文件配置

<!-- 对于项⽬资源⽂件的配置放在build中 -->
<resources>
 <resource>
 <directory>src/main/resources/${env}</directory>
 </resource>
 <resource>
 <directory>src/main/java</directory>
 <includes>
 <include>**/*.xml</include>
 <include>**/*.properties</include>
 <include>**/*.tld</include>
 </includes>
 <filtering>false</filtering>
 </resource>
</resources>

4.执行打包操作clean compile package -Pdev -Dmaven.test.skip=true
clean:清除缓存
compile:编译
package:打包
-Pdev:指定目录
-Dmaven.test.skip=true:跳过测试单元
在这里插入图片描述生成的war包在target文件夹下
在这里插入图片描述十四、Maven依赖的基本配置
依赖基本配置
根元素project下的dependencies可以包含多个 dependence元素,以声明多个依赖。每个依赖都应该包含以下元素:

  1. groupId, artifactId, version : 依赖的基本坐标, 对于任何⼀个依赖来说,基本坐标是最重要的,Maven根据坐标才能找到需要的依赖。
  2. Type: 依赖的类型,⼤部分情况下不需要声明。 默认值为jar
  3. Scope: 依赖范围(compile,test,provided,runtime,system)compile: 编译依赖范围。如果没有指定,就会默认使⽤该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、行三种classpath都有效。
  4. test: 测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使⽤此类依赖。典型的例⼦就是JUnit,它只有在编译测试代码及运行测试的时候
    才需要。
  5. provided: 已提供依赖范围。使⽤此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项⽬的时候,由于容器已经提供,就不需要Maven重复地引⼊⼀遍(如:servlet-api)。
  6. runtime: 运行时依赖范围。使⽤此依赖范围的Maven依赖,对于测试和运⾏classpath有效,但在编译主代码时无效。典型的例⼦是JDBC驱动实现,项⽬主代码的编译只需要JDK提供的JDBC接⼝,只有在执行测试或者运⾏项⽬的时候才需要实现上述接⼝的具体JDBC驱动。
  7. system: 系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全⼀致。但是,使用system范围依赖时必须通过systemPath元素显式地指定依赖⽂件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使⽤。
  8. Optional:标记依赖是否可选
  9. Exclusions: 用来排除传递性依赖。

依赖范围
⾸先需要知道,Maven在编译项⽬主代码的时候需要使⽤⼀套classpath。 ⽐如:编译项⽬代码的时候需要⽤到spring-core, 该⽂件以依赖的⽅式被引⼊到classpath中。 其次, Maven在执⾏测试的时候会使⽤另外⼀套classpath。 如:junit。最后在实际运⾏项⽬时,⼜会使⽤⼀套classpath, spring-core需要在该classpath中,⽽junit不需要。那么依赖范围就是⽤来控制依赖与这三种classpath(编译classpath,测试classpath,运⾏时classpath)的关系, Maven有以下⼏种依赖范围:
1.Compile 编译依赖范围。 如果没有指定,就会默认使⽤该依赖范围。 使⽤此依赖范围的Maven依赖, 对于编译,测试,运⾏都有效。
2.Test: 测试依赖范围。 只在测试的时候需要。⽐如junit
3.Provided: 已提供依赖范围。 使⽤此依赖范围的Maven依赖,对于编译和测试有效, 但在运⾏时⽆效。 典型的例⼦是servlet-API, 编译和测试项⽬的需要, 但在运⾏项⽬时, 由于容器已经提供, 就不需要Maven重复地引⼊⼀遍。
4.Runtime: 运⾏时依赖范围。 使⽤此依赖范围的Maven依赖,对于测试和运⾏有效, 但在编译代码时⽆效。 典型的例⼦是:jdbc驱动程序, 项⽬主代码的编译只需要jdk提供的jdbc接⼝,只有在执⾏测试或者运⾏项⽬的时候才需要实现上述接⼝的具体jdbc驱动。
5.System: 系统依赖范围。 ⼀般不使⽤。

传递性依赖
传递依赖机制, 让我们在使⽤某个jar的时候就不⽤去考虑它依赖了什么。也不⽤担⼼引⼊多余的依赖。 Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引⼊到当前目中.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敷衍zgf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值