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

Java开发学习笔记:Maven基础_第1张图片

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

Java开发学习笔记:Maven基础_第2张图片

Maven基础概念

仓库:存储jar包

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

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

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

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

Maven坐标组成部分

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

配置本地仓库的位置

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

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

Java开发学习笔记:Maven基础_第3张图片

远程仓库配置

中央仓库的默认位置
Java开发学习笔记:Maven基础_第4张图片

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

Java开发学习笔记:Maven基础_第5张图片

maven项目构建(IDEA)

普通构建

1、新建空项目,设置SDK

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

Java开发学习笔记:Maven基础_第6张图片

3、新建一个maven模块

Java开发学习笔记:Maven基础_第7张图片

4、项目坐标

Java开发学习笔记:Maven基础_第8张图片

5、在test目录新建resources目录

Java开发学习笔记:Maven基础_第9张图片

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

Java开发学习笔记:Maven基础_第10张图片

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

Java开发学习笔记:Maven基础_第11张图片

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

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

Java开发学习笔记:Maven基础_第12张图片

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

Java开发学习笔记:Maven基础_第13张图片

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

Java开发学习笔记:Maven基础_第14张图片

创建Java的Maven项目模版

在创建module时选择quickstart

Java开发学习笔记:Maven基础_第15张图片

创建JavaWeb的Maven项目模板

在创建module时选择

Java开发学习笔记:Maven基础_第16张图片

添加Tomcat插件并运行JavaWeb项目

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

Java开发学习笔记:Maven基础_第17张图片

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

Java开发学习笔记:Maven基础_第18张图片

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

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

Java开发学习笔记:Maven基础_第19张图片

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

Java开发学习笔记:Maven基础_第20张图片

依赖管理

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




<dependencies>
    
    <dependency>
        
        <groupId>log4jgroupId>
        <artifactId>log4jartifactId>
        <version>1.2.14version>
    dependency>
dependencies>

依赖传递

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

Java开发学习笔记:Maven基础_第21张图片

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

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

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

依赖隐藏

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




  <dependencies>
      
      <dependency>
          
          <groupId>log4jgroupId>
          <artifactId>log4jartifactId>
          <version>1.2.14version>
          
          <optional>trueoptional>
      dependency>
  dependencies>

依赖排除

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



<dependency>
    <groupId>com.lzhgroupId>
    <artifactId>web01artifactId>
    <version>1.0-SNAPSHOTversion>
    
    <exclusions>
        
        <exclusion>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
        exclusion>
    exclusions>
dependency>

依赖范围

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

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

<dependency>
    <groupId>org.mybatisgroupId>
    <artifactId>mybatisartifactId>
    <version>3.5.3version>
    <scope>testscope>
dependency>

不同依赖范围的性质

Java开发学习笔记:Maven基础_第22张图片

依赖范围的传递性

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

在项目传递时,gson的依赖范围也可能会发生变化,具体变化如下表,内容为空表示java02对gson不可见
Java开发学习笔记:Maven基础_第23张图片

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


<dependency>
    <groupId>io.github.openfeigngroupId>
    <artifactId>feign-gsonartifactId>
    <version>11.2version>
    <scope>runtimescope>
dependency>

<dependency>
    <groupId>com.lzhgroupId>
    <artifactId>web01artifactId>
    <version>1.0-SNAPSHOTversion>
    <scope>compilescope>
dependency>

生命周期与插件

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

Java开发学习笔记:Maven基础_第24张图片

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

1、找到Packaging下的source插件

Java开发学习笔记:Maven基础_第25张图片

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

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

Java开发学习笔记:Maven基础_第26张图片

3、点击Configuring Source Plugin查看插件配置源码
Java开发学习笔记:Maven基础_第27张图片

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

Java开发学习笔记:Maven基础_第28张图片

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

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.pluginsgroupId>
            <artifactId>maven-source-pluginartifactId>
            <version>3.2.0version>
            <executions>
                <execution>
                    <goals>
                        <goal>jargoal>    
                        <goal>test-jargoal>
                    goals>
                    
                    <phase>generate-test-resourcesphase>
                execution>
            executions>
        plugin>
    plugins>
build>

6、generate-test-resources阶段在compile和test之间。执行compile时,项目只生成了target目录。执行test时,项目生成可target目录和对应的main源码jar包和test源码jar包
Java开发学习笔记:Maven基础_第29张图片

你可能感兴趣的:(Java学习,java,maven,学习)