Maven笔记
文章目录
1. Maven介绍
1.1 Maven的相关网址:
官网: http://maven.apache.org/
Maven工具: https://mvnrepository.com/
Maven插件: http://maven.apache.org/plugins/index.html
1.2 构建相关概念
构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等等。
maven支持的构建包括有:
1.清理, 把之前项目编译的东西删除掉,为新的编译代码做准备。
2.编译, 把程序源代码编译为执行代码, java-class文件
批量的,maven可以同时把成千上百的文件编译为class。
javac 不一样,javac一次编译一个文件。
3.测试, maven可以执行测试程序代码,验证你的功能是否正确。
批量的,maven同时执行多个测试代码,同时测试很多功能。
4.报告, 生成测试结果的文件, 测试通过没有。
5.打包, 把你的项目中所有的class文件,配置文件等所有资源放到一个压缩文件中。
这个压缩文件就是项目的结果文件, 通常java程序,压缩文件是jar扩展名的。
对于web应用,压缩文件扩展名是.war
6.安装, 把5中生成的文件jar,war安装到本机仓库
7.部署, 把程序安装好可以执行。
1.3 安装
1)需要从maven的官网下载maven的安装包 apache-maven-3.3.9-bin.zip
2)解压安装包,解压到一个目录,非中文目录。
子目录 bin :执行程序,主要是mvn.cmd
子目录conf :maven工具本身的配置文件 settings.xml(这里可以设置本地仓库位置,下面有详细介绍)
3)配置环境变量
在系统的环境变量中,指定一个M2_HOME的名称, 指定它的值是maven工具安装目录,bin之前的目录。
M2_HOME=D:\work\maven_work\apache-maven-3.3.9
再把M2_HOME加入到path之中:
%M2_HOME%\bin;
4)验证,新的命令行中,执行mvn -v(注意:需要配置JAVA_HOME ,指定jdk路径),如下图所示即为成功:
2. Maven的核心概念
2.1 相关命令
mvn -v 查看版本号
mvn compile 编译命令(在pom文件的那一级目录下编译)
mvn clean 清理(会删除原来编译和测试的目录,即 target 目录,但是已经 install 到仓库里的包不会删除)
mvn test-compile 编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)
mvn test 测试(会生成一个目录surefire-reports,保存测试结果)
mvn package 打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)
mvn install 安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
mvn deploy 部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到 web 容器中)
2.2 Maven约定的目录结构
Hello
|---src
|---|---main
|---|---|---java
|---|---|---resources
|---|---test
|---|---|---java
|---|---|---resources
|---pom.xml
一般情况下,我们习惯上采取的措施是:约定>配置>编码
2.3 pom文件
即 Project Object Model 项目对象模型。Maven 把一个项目的结构和内容抽象成一个模型,在 xml 文件中进行声明,以方便进行构建和描述,pom.xml 是 Maven 的灵魂。
相关介绍:
标签 | 解释 |
---|---|
modelVersion | Maven 模型的版本,对于 Maven2 和 Maven3 来说,它只能是 4.0.0 |
groupId: | 组织 id,一般是公司域名的倒写。 格式可以为: 1.域名倒写。 例如 com.baidu 2.域名倒写+项目名。例如 com.baidu.appolo |
artifactId | 项目名称,也是模块名称,对应 groupId 中项目中的子项目。 |
version | 项目的版本号。如果项目还在开发中,是不稳定版本,通常在版本后带-SNAPSHOT 使用三位数字标识,例如 1.1.0 |
packaging | 项目打包的类型,可以使 jar、war、rar、ear、pom,默认是 jar |
dependencies和dependency | Maven 的一个重要作用就是管理 jar 包,为了一个项目可以构建或运行,项目中不可避免的,会依赖很多其他的 jar 包,在 Maven 中,这些 jar 就被称为依赖,使用标签 dependency 来配置。而这种依赖的配置正是通过坐标来定位的,由此我们也不难看出,maven 把所有的 jar 包也都视为项目存在了。 |
properties | properties 是 用 来 定 义 一 些 配 置 属 性 的 。 例 如project.build.sourceEncoding,可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。 |
build | build 表示与构建相关的配置,例如设置编译插件的 jdk 版本 。 |
parent | 在 Maven 中,如果多个模块都需要声明相同的配置,例如:groupId、version、有相同的依赖、或者相同的组件配置等,也有类似 Java 的继承机制,用 parent 声明要继承的父工程的 pom 配置。 |
modules | 在 Maven 的多模块开发中,为了统一构建整个项目的所有模块,可以提供一个额外的模块,该模块打包方式为 pom,并且在其中使用 modules 聚合的其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所有模块,叫 Maven 的聚合。 |
坐标(gav):
groupId、artifactId、version 三个元素生成了一个Maven项目的基本坐标,在众多的maven 项目中可以唯一定位到某一个项目。坐标也决定着将来项目在仓库中的路径及名称。
2.4 仓库
2.4.1 仓库介绍
1)仓库是什么: 仓库是存放东西的, 存放maven使用的jar 和 我们项目使用的jar
2)仓库的分类
>本地仓库, 就是你的个人计算机上的文件夹,存放各种jar
>远程仓库, 在互联网上的,使用网络才能使用的仓库
①:中央仓库,最权威的, 所有的开发人员都共享使用的一个集中的仓库,
https://repo.maven.apache.org :中央仓库的地址
②:中央仓库的镜像:就是中央仓库的备份, 在各大洲,重要的城市都是镜像。
③:私服,在公司内部,在局域网中使用的, 不是对外使用的。
3)仓库的使用,maven仓库的使用不需要人为参与。
开发人员需要使用mysql驱动—>maven首先查本地仓库—>私服—>镜像—>中央仓库
2.4.2 仓库位置
默认仓库(本机仓库):
C:\Users\(登录操作系统的用户名)\.m2\repository
中央仓库的地址:
https://repo.maven.apache.org
设置本机存放资源的目录位置(设置本机仓库):
- 修改maven的配置文件, maven安装目录/conf/settings.xml (先备份 settings.xml)
- 修改 <localRepository> 指定你的目录(不要使用中文目录)
3. Maven在IDEA中的应用
3.1 创建项目
1.新建空项目
2.在空项目中新建模块
3. 选择Maven,可以勾选Create from archetype
如果想创建普通的javase项目,可以勾选图示的③,maven-archetype-quickstart
如果想创建普通的javaweb项目,可以勾选图示的④,maven-archetype-webapp
4.选择Maven仓库以及填写gav坐标之后,就创建成功完毕。
普通javase项目目录如图所示:
javaweb项目目录如图所示:
3.2 一些关于仓库的修改
1.Settings设置本项目的一些设置,Other Settings设置以后新建的项目的设置。
2.找到Maven,可以分别设置本地的maven、setting以及仓库。
3.为了加快每次创建项目的速度,可以在Runner这里设置VM options为-DarchetypeCatalog=internal
3.3 导入新模块
项目中导入模块(不要忘记设置相应的jdk)
1.在项目结构中,选择Modules模块,点击“+”号,点击import Module(如果删除模块,直接选中项目,点击“-”号即可)
2.找到自己的模块:
3.选择import module from external model,并选择maven
4.加入之后,选择jdk
3.4 关于一些IDEA的操作
1.更改文件夹类型
2.pom文件爆红,有一些资源没有加载好。
单个模块的刷新:
所有模块的刷新:
3.一些maven操作,只需要双击即可
4. 依赖管理
4.1 依赖的范围管理
在依赖中,<scope></scope>表示依赖的范围管理。
依赖的范围:compile、test、provided,默认采用 compile
5. 常用设置
5.1 全局变量
首先在中定义全局变量,然后使用 ${变量名} 的方式使用。
5.2 指定资源位置
src/main/java和 src/test/java 这两个目录中的所有*.java文件会分别在 comile和 test-comiple阶段被编译,编译结果分别放到了 target/classes和 targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉,如果需要把 src目录下的文件包放到 target/classes目录,作为输出的 jar一部分。需要指定资源文件位置。以下内容放到 标签中。
<build>
<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!--filtering选项 false不启用过滤器, *.property已经起到过滤的作用了 -->
<filtering>false</filtering>
</resource>
</resources>
</build>