Java--Maven,POM,maven安装,maven核心,命令
Posted MinggeQingchun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java--Maven,POM,maven安装,maven核心,命令相关的知识,希望对你有一定的参考价值。
一、Maven
Maven是Apache软件基金会组织维护的一款自动化构建工具,Maven这个单词的本意是:专家,内行。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理
maven官网地址maven官网
maven中央仓库maven中央仓库
1、Maven作用
(1)maven 可以整合多个项目模块之间的引用,还可以根据业务和功能拆分项目
(2)maven可以自动下载jar文档,源代码;管理jar文件 以及 jar版本(自动版本兼容)
(3)管理jar包依赖的其他jar包,自动下载并引入项目
(4)编译程序,把java编译为class
(5)测试代码
(6)打包文件,形成jar文件(Java工程),或者war文件(web工程)
(7)部署项目
2、构建项目
(1)清理:删除以前的编译结果,为重新编译做好准备
(2)编译:将Java源程序(.java文件)编译为字节码文件(.class文件)
(3)测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性
(4)报告:在每一次测试后以标准的格式记录和展示测试结果
(5)打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。(Java 工程对应jar 包,Web 工程对应war包)
(6)安装:在Maven环境下特指将打包的结果--jar包或war包安装到本地仓库中
(7)部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行
二、maven安装环境
1、从maven官网下载以前旧版本,可以查看文档,对应的JDK版本
maven老版本下载
2、将下载好的maven压缩包放在指定位置路径下,解压(路径不要带中文)
主要有如下两个目录
bin:执行程序,主要是mvn.cmd
conf:maven工具本身的配置文件 settings.xml
3、配置maven的环境变量
(1)在系统的环境变量中,新建一个M2_HOME的系统变量名称, 指定值是maven工具安装目录,bin之前的目录
如:M2_HOME=D:\\JDK\\apache-maven-3.6.3
(2)再把M2_HOME加入到 path 之中,在所有路径之前加入 %M2_HOME%\\bin;
新的命令行中,执行mvn -v 命令
mvn -v
第一次运行可能会报错如下:
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE
(3)在这里在创建一个 JAVA_HOME的系统变量
注:需要配置JAVA_HOME ,指定jdk路径
maven运行的时候如果用到了java.exe,没配置,maven就不能调用,配置了,就能调用
此时关闭DOS窗口,重新打开,重新运行 mvn -v命令,出现如下内容,maven安装,配置正确
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\\JDK\\apache-maven-3.6.3\\bin\\..
Java version: 1.8.0_291, vendor: Oracle Corporation, runtime: D:\\JDK\\java
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
4、执行mvn compile命令
第一次执行mvn compile命令时,会编译src/main目录下的所有java文件
(1)执行下载操作
maven工具执行的操作需要很多插件(java类--jar文件)完成的
(2)下载jar包(插件)
(3)下载的jar包存放位置
默认仓库(本机仓库):
C:\\Users\\(登录操作系统的用户名)Administrator\\.m2\\repository
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-parameter-documenter-2.0.9.pom
https://repo.maven.apache.org :中央仓库的地址
执行mvn compile, 结果是在项目的根目录下生成target目录(结果目录), maven编译的java程序,最后的class文件都放在target目录中
5、设置maven安装主目录,setting.xml文件和本地仓库位置
(1)设置本机存放资源的目录位置(设置本机仓库)
默认仓库(本机仓库)存放位置:
C:\\Users\\(登录操作系统的用户名)Administrator\\.m2\\repository
可以将其复制到设定的目标路径,如将其复制到如下路径
D:\\XXXX\\maven-work\\repository (个人计算机存放位置)
(2)修改maven的配置文件, maven安装目录\\conf\\settings.xml(如:D:\\XXXX\\apache-maven-3.6.3\\conf\\settings.xml (个人计算机存放位置)),先备份 settings.xml
(3)编辑settings.xml文件,修改 <localRepository> 指定你的目录(不要使用中文目录)
D:\\XXXX\\maven-work\\repository (个人计算机存放位置)
打开settings.xml文件,发现原始配置如下,在53行
我们将<localRepository>标签拷贝出来,将标签中的路径修改为自己从默认C盘中拷贝出来的repository文件夹
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 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>D:\\JDK\\maven-work\\repository</localRepository>
三、Maven核心
1、约定的目录结构
maven项目采用“约定优于配置”的原则;maven项目的目录和文件的位置都是规定好的
一般情况下,约定>配置>编码
Maven默认约定了一套目录结构,在通过Maven创建了项目以后,项目的目录结构就是以这套目录结构作为模板创建的。虽然Maven提供了很多的模板,但是基本的目录结构都是固定的
根目录下主要有三个文件
src,target,pom.xml
Hello 根目录(工程名)
|---src 源代码
|---|---main 主程序
|---|---|---java 主程序的 java 源码
|---|---|---resources 主程序的配置文件
|---|---|---webapp (web项目)该目录是web应用源代码目录,如html文件和web.xml等都在该目录下
|---|---|---filters 项目的资源过滤文件所在的目录
|---|---test 测试程序
|---|---|---java 测试程序的 java 源码
|---|---|---resources 测试程序的配置文件
|---|---|---filters 测试相关的资源过滤文件所在的目录
|---target 存放编译、打包后的输出文件
|---pom.xml Maven 工程的核心配置文件
我们可以在DOS命令窗口 或者 Windows PowerShell 输入
tree 根目录文件名
如下,tree Hello
2、POM
POM(Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件(pom.xml),包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。maven把一个项目当做一个模型使用。控制maven构建项目的过程,管理jar依赖
补充标签:
(1)<scope>标签:依赖范围
scope的值有 compile,test,provided ,默认是compile
在maven构建项目的编译, 测试 ,打包, 安装 ,部署 过程(阶段)起作用
如下, junit的依赖范围是 test
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
(2)<properties>标签:属性设置
【1】maven中常用属性设置
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 项目构建使用的编码,避免中文乱
码
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 生成报告的编码
<maven.compiler.source>1.8</maven.compiler.source> 源码编译 jdk 版本
<maven.compiler.target>1.8</maven.compiler.target> 运行代码的 jdk 版本
</properties>
【2】 设置全局变量
在 Maven 的 pom.xml 文件中,<properties>用于定义全局变量
POM 中通过$property_name的形式引用变量的值,标签名称一般由 项目名称 + 字段version组成
单个单词可直接 XX.version命名,多个单词可横线分割 XX-XX-version
定义全局变量
<properties>
<dubbo.version>2.6.2</dubbo.version>
<spring-context-version>4.3.10.RELEASE</spring-context-version>
</properties>
引用全局变量
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>$dubbo.version</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>$spring-context-version</version>
</dependency>
(3)<resource>标签:资源;<build>标签:构建
src/main/java 和 src/test/java 这两个目录中的所有*.java 文件会分别在 comile 和 test-comiple 阶段被编译,编译结果分别放到了 target/classes 和 targe/test-classes 目录中,但是这两个目录中的其他文件都会被忽略掉,如果需 要把 src 目录下的文件包放到 target/classes 目录,作为输出的 jar 一部分。需要指定资源文件位置。以下内容放到 <buid>标签中
<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>
3、坐标(gav)
Maven 把任何一个插件都作为仓库中的一个项目进行管理,用一组(三个)向量组成的坐标来表示坐标在仓库中可以唯一定位一个 Maven 项目
groupId:组织名,通常是 公司或组织域名倒序 + 项目名
artifactId:模块名,通常是工程名
version:版本号
项目在仓库中的位置是由坐标来决定的:groupId、artifactId 和 version 决定项目在仓库中的路径,artifactId 和 version 决定 jar 包的名称
4、依赖管理(dependency)
管理项目可以使用的jar文件
依赖范围:compile、test、provided,默认采用 compile
注:
项目中用到的所有依赖(jar ) ,必须在本地仓库中有;没有必须通过maven下载, 包括provided的都必须下载
5、仓库管理
Maven仓库能帮助我们管理它的文件(主要是JAR),就是放置所有JAR(WAR,ZIP,POM)的地方
(1)Maven 仓库存放
【1】Maven 的插件,插件也是一些 jar,这些 jar 可以完成一定的功能
【2】我们自己开发项目的模块
【3】第三方框架或工具的 jar 包
(2)仓库分类
本地仓库:个人计算机上的文件夹,存放各种jar
默认存放在~\\.m2\\repository中
远程仓库, 在互联网服务器上的,使用网络才能使用的仓库
【1】中央仓库,最权威的, 所有的开发人员都共享使用的一个集中的仓库
https://repo.maven.apache.org :中央仓库的地址
【2】中央仓库的镜像:就是中央仓库的备份, 在各大洲,重要的城市都是镜像
【3】私服,在公司内部,在局域网中使用的, 不是对外使用的。
6、生命周期
maven工具构建项目的过程,就是生命周期
maven构建项目的过程,清理,编译,测试,报告,打包,安装,部署
(1)mvn compile
编译main/java/目录下的java 为class文件, 同时把class拷贝到 target/classes目录下面
把main/resources目录下的所有文件 都拷贝到target/classes目录下(2)mvn test-compile
编译测试程序(会在当前目录下生成一个 target目录,里边存放编译测试程序之后生成的字节码文件)
(3)mvn test
测试(会生成一个目录surefire-reports,保存测试结果)
(4)mvn package
打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)
(5)mvn install
安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
(6)mvn deploy
部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中还会自动把项目部署到 web 容器中)
(1)使用 mvn package 打包之后,会在工程目录的target目录下生成一个工程名-版本好的jar包
(2)将其拷贝到自己复制的maven本地库下,按照工程路径com.公司组织名.工程名
(3)查看当前被打包的工程pom.xml文件下的坐标(gav)信息
(4)将其拷贝到需要依赖引用的工程下
(5)编译测试,通过
7、插件
maven命令执行时,真正完成功能的是插件,插件就是一些jar文件, 一些类
8、继承
9、聚合
以上是关于Java--Maven,POM,maven安装,maven核心,命令的主要内容,如果未能解决你的问题,请参考以下文章
Java Maven MOJO - 从项目 POM 中获取信息