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标签限定依赖的使用范围
- 主程序范围有效(main目录内)
- 测试程序范围有效(test目录内)
- 是否参与打包,即打包后是否含有该依赖(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基础的主要内容,如果未能解决你的问题,请参考以下文章