Maven-jar包管理工具

Maven


  • 环境:
    • eclipse-2020-12
    • apache-maven-3.6.3
    • apache-tomcat-9.0.41
    • java - 1.8

Maven是什么

  1. Maven是一款服务于 Java平台的自动化构建工具
    • Make --> Ant --> Maven --> Gradle
  2. 构建
    1. 概念:以 “Java源文件”、“框架配置文件”、“JSP”、“HTML”、“图片” 等资源为 “原材料”,去 “生产” 一个可以运行的项目的过程。
      • 编译
      • 部署
      • 搭建
    2. 编译:Java源文件[User.java] → 编译 → Class字节码文件[User.class] → 交给 JVM去执行
    3. 部署:一个 BS项目最终运行的并不是动态 Web工程本身,而是这个动态 Web工程 “编译的结果”
      • 开发过程中,所有的路径或配置的类路径等都是以编译结果的目录结构为标准的。

        Tips:运行时环境
        Aa
        其实是一组 jar包的引用,并没有把 jar包本身复制到工程中,所以并不是目录。

  3. 构建过程中的各个环节:
    1. 清理:将以前编译得到的旧的 class字节码文件删除,为下一次编译做准备。
    2. 编译:将 Java源程序编程成 class字节码文件。
    3. 测试:自动测试,自动调用 junit程序。
    4. 报告:测试程序执行的结果。
    5. 打包:动态 Web工程打 war包,Java工程打 jar包。
    6. 安装:Maven特定的概念 —— 将打包得到的文件复制到 “仓库” 中的指定位置。
    7. 部署:将动态 Web工程生成的 war包复制到 Servlet容器的指定目录下,使其可以运行。
  4. 自动化构建

Maven 项目架构管理工具

我们目前用来就是方便导入jar包的
Maven的核心思想:约定大于配置

  • 有约束,不要去违反。

Maven会规定好你该如何去编写我们的 Java代码,必须要按照这个规范来;

Maven的核心概念

  1. 约定的目录结构
  2. POM
  3. 坐标
  4. 依赖
  5. 仓库
  6. 生命周期/插件/目标
  7. 继承
  8. 聚合

约定的目录结构

  1. 创建约定的目录结构
    • 根目录:工程名
      • src目录:源码
        • main目录:存放主程序
          • Java目录:存放 Java源文件
          • resources目录:存放框架或其他工具的配置文件
        • test目录:存放测试程序
          • Java目录
          • resources目录
      • pom.xml文件:Maven工程的核心配置文件

pom文件

  • pom的含义:Project Object Model 项目对象模型

pom.xml 是 Maven的核心配置文件
Aa

pom.xml 文件内容

<?xml version="1.0" encoding="UTF-8"?>

<!-- Maven版本和头文件-->
<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>

<!--   这里就是我们刚才配置的 GAV-->
  <groupId>org.example</groupId>
  <artifactId>untitled3</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!--  Package:项目的打包方式
  jar:java应用
  war:javaweb应用
  -->
  <packaging>war</packaging>

  <!--配置-->
  <properties>
    <!--项目的默认构造编码-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!--编码版本-->
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <!--项目依赖-->
  <dependencies>

    <!--具体依赖的 jar包配置文件-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

  <!--项目构建用的东西-->
  <build>
    <finalName>untitled3</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
  • Maven 由于他的约定大于配置,我们之后可能遇到我们写的配置文件,无法导出或者生效的问题,解决方案:

原文章:[https://www.cnblogs.com/pixy/p/4798089.html]

> 配置resouces节点

<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>**/*.properties</exclude>
                <exclude>**/*.xml</exclude>
            </excludes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

坐标

  • Maven的坐标
    使用下面三个向量在仓库中唯一定位一个 Maven工程

    • groupId:公司或组织域名倒序+工程名

      <groupId>com.baidu.maven</groupId>
      
    • artifactId模块名

      <artifactId>Hello</artifactId>
      
    • version:版本

      <version>1.0.0</version>
      
  • Maven工程的坐标与仓库中路径的对应关系

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
</dependency>
本地仓库路径\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar

仓库

  1. 仓库的分类
    • 本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有 Maven工程服务。
    • 远程仓库:
      1. 私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven工程服务。
      2. 中央仓库:架设在 Internet上,为全世界所有 Maven工程服务。
      3. 中央仓库镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。
  2. 仓库中保存的内容:Maven工程
    1. Maven自身所需要的插件
    2. 第三方框架或工具的 jar包
    3. 我们自己开发的 Maven工程

依赖

  1. Maven解析依赖信息时会到本地仓库中查找被依赖的 jar包。

    • 对于我们自己开发的 Maven工程,在本地仓库中使用 mvn install命令安装。
  2. 依赖的范围

    范围 对主程序是否有效 对测试程序是否有效 是否参与打包 是否参与部署
    compile
    test × ×
    provided × ×

生命周期

  1. 各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
  2. Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
  3. Maven核心程序为了更好的实现自动化构建,按照这一特点执行生命周期中的各个阶段:不论现在要执行生命周期中的哪一阶段,都是从这个生命周期最初的位置开始执行。
    • 在命令行中运行 执行测试打包就可以查看各个环节。
  4. 插件和目标
    1. 生命周期的各个阶段仅仅定义了要执行的任务是什么。

    2. 各个阶段和插件的目标是对应的。

    3. 相似的目标由特定的插件来完成。

      生命周期阶段 插件目标 插件
      compile compile maven-compiler-plugin
      test-compile testCompile maven-compiler-plugin
    4. 可以将 插件目标看作 “调用插件功能的命令”

Maven安装

下载

官网:[http://maven.apache.org/]

下载位置:
Aa

下载完成后,解压到一个非中文无空格路径下;
如:C:\Environment

配置环境变量

在我们的系统环境变量中

  1. 检查 Java环境变量

    C:\Users\wang>echo %JAVA_HOME%
    C:\Environment\Java\JDK-8
    
    C:\Users\wang>java -version
    java version "1.8.0_271"
    
  2. 配置如下配置:

    • M2_HOME Maven目录下的 bin目录
    • MAVEN_HOME Maven的目录
    • 在我们系统的 path中配置 %MAVEN_HOME%\bin

Aa

在命令行中输入:mvn -version 测试 Maven是否安装成功。

设置远程仓库 URL

  • 镜像:mirrors
    • 作用:加速我们的下载
  • 国内建议使用阿里云的镜像
文件路径:apache-maven-3.6.3\conf\settings.xml
<!-- 阿里云镜像 -->
<mirrors>
  <mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
  </mirror>
</mirrors>

本地仓库

在 Maven主目录中创建一个文件夹,用来当 Maven本地仓库

<!-- localRepository
  | The path to the local repository maven will use to store artifacts.
  |
  | Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<!-- localRepository 标签用来保存 Maven本地仓库的地址 -->
<localRepository>C:\Environment\apache-maven-3.6.3\maven-repo</localRepository>

Maven设置JDK版本

在 IDE中使用 Maven

在 IDEA中使用 Maven

创建 Maven工程

  1. 打开IDEA
  2. 创建一个 MavenWeb项目
    Aa
    • 这个只有在 Web应用下才会有!
      Aa
  3. 输入项目名..
    Aa
  4. 设置 Maven的地址
    Aa
  5. 等待项目初始化完毕
    Aa
  6. 观察 Maven本地仓库中多了什么东西
  7. IDEA中的 Maven设置
    注意:IDEA项目创建成功后,看一眼 Maven的配置
    Aa
    Aa

创建一个普通的 Maven项目

Aa
Aa

标记文件夹功能

方法一:

Aa

方法二:

Aa
Aa
Aa

在 Eclipse中使用 Mvane

设置 Eclipse内置的 Maven

  1. 添加自己解压的 Maven
    • Aa
  2. 导入 Maven的 settings.xml文件
    • settings.xml文件存在的路径:apache-maven-3.6.3\conf\settings.xml
    • Aa

创建 JavaWeb工程

  1. Aa
  2. Aa
  3. Aa
  4. Aa

在 IDEA中配置 Tomcat

1、社区版配置

  1. 打开设置
    Aa
  2. 安装 Tomcat插件
    Aa
  3. 重启IDEA
  4. 导入 Tomcat服务器
    Aa
  5. 导入 Tomcat启动配置
    Aa
  6. 设置 Tomcat启动配置
    Aa
  7. 打开网站
    Aa

常用 Maven命令

  • 注意:

    • 执行于构建过程相关的 Maven命令,必须进入 pom.xml所在的目录。
      • 与构建过程相关:编译、测试、打包....
  • 常用命令

    命令 作用
    mvn clean 清理
    mvn test-complie 编译主程序
    mvn test 执行测试
    mvn package 打包
    mvn install 安装
    mvn site 生成站点

解决遇到的问题

  1. Maven 3.6.2
    解决方法:降级为 3.6.1
    Aa

  2. Tomcat闪退

    • Java环境问题
  3. Maven默认 Web项目中的 web.xml版本问题
    Aa

  4. 替换为 webapp4.0版本和 tomcat一致

    • 路径为:apache-tomcat-9.0.41\webapps\ROOT\WEB-INF
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                          http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
            version="4.0"
            metadata-complete="true">
    </web-app>
    
  5. Maven仓库的使用

Servlet需要的架包

<dependencies>
    <!-- Servlet依赖 -->
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    </dependency>

    <!-- JSP依赖 -->
    <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.3</version>
    </dependency>

    <!-- JSTL表达式的依赖 -->
    <dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
    </dependency>

    <!-- standard标签库 -->
    <dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
    </dependency>

    <!-- mysql的驱动 -->
    <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<version>5.1.47</version>
    </dependency>

  	<!-- mybatis -->
  	<dependency>
  		<groupId>org.mybatis</groupId>
  		<artifactId>mybatis</artifactId>
  		<version>3.5.2</version>
  	</dependency>

	  <!-- junit -->
  	<dependency>
  		<groupId>junit</groupId>
  		<artifactId>junit</artifactId>
  		<version>4.12</version>
  	</dependency>

    <!-- 导入 Lombok jar包 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.16</version>
		</dependency>

</dependencies>
posted @ 2021-02-21 09:50    阅读(372)  评论(0)    收藏  举报