Java开发学习笔记:Maven基础

Posted 晚风Serein

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java开发学习笔记:Maven基础相关的知识,希望对你有一定的参考价值。

Maven简介

传统项目管理的缺点:jar包可能不统一或不兼容、工程升级维护过程繁琐…

Maven的本质是项目管理工具,将项目开发和管理过程抽象成项目对象模型(POM,Project Object Model),即一个项目就是一个对象。

Maven作用

项目构建:提供标准的、跨平台的自动化项目构建方式

依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题

统一开发结构:提供标准的、统一的项目结构

下载与安装

Maven官网:https://maven.apache.org/download.cgi

环境变量配置

系统变量新建MAVEN_HOME:maven目录位置

Path变量添加:%MAVEN_HOME%\\bin

cmd命令行输入mvn检查配置是否成功

Maven基础概念

仓库:存储jar包

本地仓库:本机存储资源的仓库,可以连接远程仓库(私服)获取资源

远程仓库:非本机电脑的仓库,能为本地仓库较快提供资源

中央仓库:Maven团队管理,存储所有资源的仓库,在国外

坐标:用于定位资源,便于查找

Maven坐标组成部分

  • groupId:定义当前Maven项目隶属组织名(通常是域名反写,例如org.mybatis)
  • artifactId:定义当前Maven项目名称(模块名称,例如CRM、SMS)
  • version:定义当前版本号

配置本地仓库的位置

本地仓库的默认位置实在C盘当前用户目录的.m2目录中,由于C盘是系统盘,需要修改位置

进入maven的conf目录的配置文件setting.xml,修改localRepository,如下

远程仓库配置

中央仓库的默认位置

pom文件中的中央仓库位于国外,在setting.xml中配置使用阿里云的镜像仓库

maven项目构建(IDEA)

普通构建

1、新建空项目,设置SDK

2、修改Maven配置(可以使用默认,这里将其更改为已安装的maven)

3、新建一个maven模块

4、项目坐标

5、在test目录新建resources目录

6、选择不同目录的类型,点击应用后自动生成该模块的pom.xml文件

7、在pom.xml文件中添加所需依赖并保存,进入maven项目窗口,刷新查看依赖是否添加成功

8、在main目录和test目录写入源代码和测试代码

9、在maven项目窗口双击compile和test命令进行编译和测试

10、终端窗口显示run的数量为1表示已运行一个测试样例,运行成功。并且在target/surefire-reports目录下的xml文件也可以查看测试用例报告

11、执行install命令,可以生成对应版本的jar包

创建Java的Maven项目模版

在创建module时选择quickstart

创建JavaWeb的Maven项目模板

在创建module时选择

添加Tomcat插件并运行JavaWeb项目

1、在mvnrepository仓库中找到tomcat插件,复制插件的坐标

2、在pom.xml文件中添加该插件的坐标(注意结构)

3、如果有报错,那就打开右侧Maven项目窗口,点击刷新。在IDEA下载完成之后报错就消失了

4、在Maven项目窗口找到tomcat插件,双击run命令运行。运行成功后会显示运行网页的URL,即表示运行成功

5、可以在插件中配置端口和默认访问路径的配置

依赖管理

依赖是指当前项目运行需要的jar包,一个项目可以设置多个依赖

<!-- pom.xml -->

<!--依赖集-->
<dependencies>
    <!--具体依赖-->
    <dependency>
        <!--依赖坐标-->
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
    </dependency>
</dependencies>

依赖传递

将项目A作为项目B的资源:方法是将项目A的坐标当作依赖配置到项目B的pom.xml文件中

刷新Maven项目窗口,在java02项目的依赖中会出现web01项目。

如果项目A中有依赖,项目B也可以使用项目A中的依赖。

如果依赖重复,优先使用距离项目近的依赖(即层级小的)

依赖隐藏

web01作为java02的依赖,web01中的依赖log4j隐藏,则java02对log4j不可见

<!-- web01/pom.xml -->

<!--依赖集-->
  <dependencies>
      <!--具体依赖-->
      <dependency>
          <!--依赖坐标-->
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.14</version>
          <!-- 对外隐藏  java02对这个依赖不可见-->
          <optional>true</optional>
      </dependency>
  </dependencies>

依赖排除

web01作为java02的依赖,java02和web01都有log4j依赖,要在web01依赖传递的时候排除log4j依赖

<!--java02/pom.xml -->

<dependency>
    <groupId>com.lzh</groupId>
    <artifactId>web01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 排除依赖集 -->
    <exclusions>
        <!-- 排除依赖 -->
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

依赖范围

依赖的jar默认情况可以在任何地方使用,可以通过scope标签限定依赖的使用范围

  1. 主程序范围有效(main目录内)
  2. 测试程序范围有效(test目录内)
  3. 是否参与打包,即打包后是否含有该依赖(package指令)
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.3</version>
    <scope>test</scope>
</dependency>

不同依赖范围的性质

依赖范围的传递性

web01是java02的直接依赖,gson是web01的直接依赖,gson是java02的间接依赖。

在项目传递时,gson的依赖范围也可能会发生变化,具体变化如下表,内容为空表示java02对gson不可见

如下配置,直接依赖为compile,间接依赖为runtime,故gson在java02范围是runtime

<!-- web01/pom.xml -->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-gson</artifactId>
    <version>11.2</version>
    <scope>runtime</scope>
</dependency>
<!-- java02/pom.xml -->
<dependency>
    <groupId>com.lzh</groupId>
    <artifactId>web01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>

生命周期与插件

在maven官网提供了一些与生命周期有关的插件,用于在生命周期的某个阶段做出对应的工作

以生成源码包的插件为例,描述maven生命周期插件的使用。

1、找到Packaging下的source插件

2、source:jar 用于将项目的main目录源码处理成jar包

source:test-jar 用于将项目的test目录源码处理成jar包

3、点击Configuring Source Plugin查看插件配置源码

4、写入pom文件中,刷新maven项目窗口

5、配置该插件的执行目标和执行阶段

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>jar</goal>    <!--生成main源码jar包 -->
                        <goal>test-jar</goal><!--生成test源码jar包 -->
                    </goals>
                    <!--在生成测试资源阶段执行 -->
                    <phase>generate-test-resources</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

6、generate-test-resources阶段在compile和test之间。执行compile时,项目只生成了target目录。执行test时,项目生成可target目录和对应的main源码jar包和test源码jar包

以上是关于Java开发学习笔记:Maven基础的主要内容,如果未能解决你的问题,请参考以下文章

Java开发学习笔记:Maven基础

Maven 学习笔记 基础环境搭建

Java 基础开发技术查缺补漏笔记

Java 基础开发技术查缺补漏笔记

Java 服务器开发必备系列 —— Maven

Maven笔记(更新中)