一、初识Maven
简介
Maven是一款帮助Java项目构建的工具,同时,它也帮助管理jar包及其依赖关系。
优势
- 管理jar包与依赖关系:Maven仓库、私服
- 作为构建管理工具:编译、打包、持续集成
流程
- 清理:删除上一次构建的结果,为下一次构建做好准备
- 编译:Java源程序编译成*.class字节码文件
- 测试:运行提前准备好的测试程序
- 报告:针对刚才测试结果生成一个全面的信息
- 打包:
- Java工程:jar包
- Web工程:war包
- 安装:把一个Maven工程经过打包操作生成的jar包活war包存入Maven仓库
- 部署:
- jar包:把一个jar包部署到Nexus私服上
- war包:借助相关Maven插件(如cargo),将war包部署到Tomcat服务器上
依赖
A工程里用到了B工程的类、接口等资源,那么可以说A依赖B。如junit-4.12依赖hamcrest-core-1.3。
工作机制
- Maven核心程序:安装包
- Maven命令:Maven插件jar包
- Maven工程:Maven仓库:自己的jar包、框架或三方库jar包、Maven插件jar包(如果本地没有,去远处仓库下载)
二、安装与配置
下载Maven
下载地址:Maven – Welcome to Apache Maven
安装Maven
- 下载上图中对应平台的安装包,解压缩,得到Maven核心程序(建议路径非中文、无空格)
- 配置系统环境变量
MAVEN_HOME
,path增加%MAVEN_HOME%\bin
注意Maven运行在java环境中,所以需要先安装好jdk环境(类似Maven,见下图中%JAVA_HOME%相关配置)。
- 验证:
mvn -v
输出版本信息,同mvn --version
配置Maven
- 配置本地仓库。配置后无需创建目录,首次运行会自行创建。默认地址是用户目录下
USER\.m2\repository
,但是这个地址一般在C盘(系统盘),而仓库随着使用的增加会不断扩大,占用系统盘空间,所以可以在配置文件中修改本地仓库地址。
<localRepository>D:\.m2\repository3</localRepository>
- 配置远程仓库。本地仓库中没有的资源,会从远端仓库中获取。中央仓库在国外,有时候访问非常慢,所以一般配置国内的镜像仓库,如阿里云提供的镜像仓库。找到settings.xml中的mirrors标签,注释掉原来的maven-default-http-blocker配置,将阿里云仓库配置复制过来。如下图:
<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
- 配置JDK版本Maven默认的jdk版本是1.5,实际常用通常为1.8+,所以需要在settings.xml配置全局生效,当然也可以在具体项目中单独配置。将如下配置,放到profiles标签里面。
<profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile>
三、应用Maven
核心概念
- 坐标:使用三个
向量
在Maven仓库
中唯一定位到一个jar
包。gav
:groupId
+artifactId
+version
- groupId:公司或组织的id,如: com.alibaba
- artifactId:一个项目或项目中的一个模块id,如druid
- version:模块的版本号,根据项目需要设定,如 1.2.9(开发时发布的快照版标记SNAPSHOT、正式发版RELEASE等)
- 位置:路径为groupId,文件名为artifactId-version.jar,如:druid-1.2.9.jar在本地仓库中的位置为.m2\respository\com\alibaba\druid-1.2.9.jar
- POM:Project Object Model,项目对象模型。类似于前端的DOM,将Maven工程抽象成一个对象模型。
- 约定的目录结构:基础配置在超级pom中配置,所有其他pom都是继承自超级pom。
- 约定目录结构的意义:为了让构建过程尽可能自动化完成
- 约定大于配置:就是给了默认配置,当然也可以自定义配置。
- pom文件解析
学习Maven后期主要就是学习pom.xml的使用
- project标签:根标签,表示对当前工程进行配置、管理。
- modelVersion标签:从Maven2开始就固定式4.0.0,代表当前pom.xml所采用的标签结构。
- gav标签:坐标信息。
- groupId:代表公司或组织开发的某个项目
- artifactId:代表项目下的某个模块
- version:代表当前模块的版本
- packaging标签:打包方式。
- 默认是jar,生成jar包,说明是一个java工程;
- 改为war,生成war包,说明是一个web工程;
- 改为pom,说明这个工程是用来管理其他工程的工程。
- properties标签:在Maven中定义属性值
- project.build.sourceEncoding:在构建过程中读取源码的字符集
- dependencies标签:配置具体依赖信息,可以包含多个dependency子标签。
- dependency:配置一个具体的依赖信息
- garvs(s:scope):坐标信息,导入jar包的坐标信息
- scope:当前依赖的范围
- 命令这里涉及到
Maven生命周期
的概念。下面列出的是常用的命令,实际在执行其中任何一个时都会触发一个命令的链条
,这个链条就叫做Maven的生命周期。详见 附录2:maven生命周期
- clean:清理本地编译
- compile:编译
- test-compile:编译测试代码
- test:运行测试代码
- package:打包到工程target目录
- install:安装到本地仓库
- deploy:发布到远程仓库
- mvn archetype:generate:创建一个标准的 Maven Java 工程
- mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4:创建一个标准的 Maven Web 工程
- ……
- 依赖范围:scope标签,表示依赖包的作用域
范围 |
main目录(空间) |
test目录(空间) |
开发过程(时间) |
部署到服务器(时间) |
compile |
√ |
√ |
√ |
√ |
test |
× |
√ |
√ |
× |
provided |
√ |
√ |
√ |
× |
system |
√ |
√ |
√ |
√ |
runtime |
× |
√ |
√ |
√ |
import (……) |
- |
- |
- |
- |
- compile:默认,开发部署全过程需要的,主体程序
- test:测试,如junit
- provided:已提供,如servlet-api,tomcat中存在,所以不需要打入war包;如果不写provided,可能产生冲突。
- system:系统本地的jar包,见 附1:maven的基本操作之system scope
- runtime:数据库jdbc的具体实现,开发过程中不需要实现,只要接口就可以。
- import:引入其他项目的依赖(等到学习springboot时会了解到)
- 依赖的传递
- 只有compile范围的可以传递
- test/provided范围不可传递
- 必须要在本地仓库。如果是本地工程,则需要mvn install
- 依赖的排除
- 阻断依赖的传递(防止版本冲突)
- exclusions > exclusion标签
- 继承
- A工程的pom.xml继承B工程的pom.xml
- 使用父工程统一管理依赖信息的版本
- dependencyManagement标签
- 聚合
- modules > module 标签
- 父工程中包含的子工程,就叫做聚合
- 如同子工程组装成父工程,付子工程是has-a的关系
- 在父工程执行命令,子工程会按照以来顺序执行
应用实例
命令行模式下操作
当首次执行某个命令时,会下载插件相关的一些jar包资源,如下图;之后再次执行不需要下载;清空本地仓库后,需要重新下载。下载完成后才执行。
mvn archetype:generate
创建工作空间目录(JAVA工程)
- 调整创建的工程目录
- 上一步创建出来的工程中,默认引入了junit-3.8.1,这个版本比较老,我们改为4.13。
- 还有两个main和test目录的相同路径下,创建了一个测试用的java类,测试类删除,原因如下图,java类可以自行选择是否保留。
要求:运行Maven中的构建操作相关的命令时,必须进入pom.xml所在的目录。如果没在pom.xml所在目录运行构建命令,则会产生如下报错信息:
E:\mavenproject\project02>mvn compile [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.065 s [INFO] Finished at: 2024-09-09T13:00:43+08:00 [INFO] ------------------------------------------------------------------------ [ERROR] The goal you specified requires a project to execute but there is no POM in this directory (E:\mavenproject\project02). Please verify you invoked Maven from the correct directory. -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MissingProjectException
mvn clean
清理target目录(已经编译或打包的文件)
E:\mavenproject\project02\promaven2java>mvn clean [INFO] Scanning for projects... [INFO] [INFO] ---------------< com.sheeprunner.mvndemo:promaven2java >---------------- [INFO] Building promaven2java 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ promaven2java --- [INFO] Deleting E:\mavenproject\project02\promaven2java\target [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.783 s [INFO] Finished at: 2024-09-09T13:02:38+08:00 [INFO] ------------------------------------------------------------------------
mvn compile
编译
E:\mavenproject\project02\promaven2java>mvn compile [INFO] Scanning for projects... [INFO] [INFO] ---------------< com.sheeprunner.mvndemo:promaven2java >---------------- [INFO] Building promaven2java 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ promaven2java --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ promaven2java --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to E:\mavenproject\project02\promaven2java\target\classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.809 s [INFO] Finished at: 2024-09-09T13:07:49+08:00 [INFO] ------------------------------------------------------------------------
mvn test-compile
编译测试代码
E:\mavenproject\project02\promaven2java>mvn test-compile [INFO] Scanning for projects... [INFO] [INFO] ---------------< com.sheeprunner.mvndemo:promaven2java >---------------- [INFO] Building promaven2java 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ promaven2java --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ promaven2java --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ promaven2java --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ promaven2java --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to E:\mavenproject\project02\promaven2java\target\test-classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.424 s [INFO] Finished at: 2024-09-09T13:08:50+08:00 [INFO] ------------------------------------------------------------------------
mvn test
执行测试。执行测试会重新执行compile和test compile,其实是Maven核心概念之一的 生命周期。
E:\mavenproject\project02\promaven2java>mvn test [INFO] Scanning for projects... [INFO] [INFO] ---------------< com.sheeprunner.mvndemo:promaven2java >---------------- [INFO] Building promaven2java 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ promaven2java --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ promaven2java --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ promaven2java --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ promaven2java --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ promaven2java --- [INFO] Surefire report directory: E:\mavenproject\project02\promaven2java\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.sheeprunner.mvndemo.TestStringUtil testStringEmpty testStringEmpty end Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.052 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.069 s [INFO] Finished at: 2024-09-09T13:10:48+08:00 [INFO] ------------------------------------------------------------------------
mvn package
打包
E:\mavenproject\project02\promaven2java>mvn package [INFO] Scanning for projects... [INFO] [INFO] ---------------< com.sheeprunner.mvndemo:promaven2java >---------------- [INFO] Building promaven2java 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ promaven2java --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ promaven2java --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ promaven2java --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ promaven2java --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ promaven2java --- [INFO] Surefire report directory: E:\mavenproject\project02\promaven2java\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.sheeprunner.mvndemo.TestStringUtil testStringEmpty testStringEmpty end Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.056 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ promaven2java --- [INFO] Building jar: E:\mavenproject\project02\promaven2java\target\promaven2java-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.259 s [INFO] Finished at: 2024-09-09T13:12:30+08:00 [INFO] ------------------------------------------------------------------------
target生成
mvn install
安装到本地仓库,包括压缩包和pom.xml
E:\mavenproject\project02\promaven2java>mvn clean install [INFO] Scanning for projects... [INFO] [INFO] ---------------< com.sheeprunner.mvndemo:promaven2java >---------------- [INFO] Building promaven2java 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ promaven2java --- [INFO] Deleting E:\mavenproject\project02\promaven2java\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ promaven2java --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ promaven2java --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to E:\mavenproject\project02\promaven2java\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ promaven2java --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ promaven2java --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to E:\mavenproject\project02\promaven2java\target\test-classes [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ promaven2java --- [INFO] Surefire report directory: E:\mavenproject\project02\promaven2java\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.sheeprunner.mvndemo.TestStringUtil testStringEmpty testStringEmpty end Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.057 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ promaven2java --- [INFO] Building jar: E:\mavenproject\project02\promaven2java\target\promaven2java-1.0-SNAPSHOT.jar [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ promaven2java --- [INFO] Installing E:\mavenproject\project02\promaven2java\target\promaven2java-1.0-SNAPSHOT.jar to D:\.m2\repository3\com\sheeprunner\mvndemo\promaven2java\1.0-SNAPSHOT\promaven2java-1.0-SNAPSHOT.jar [INFO] Installing E:\mavenproject\project02\promaven2java\pom.xml to D:\.m2\repository3\com\sheeprunner\mvndemo\promaven2java\1.0-SNAPSHOT\promaven2java-1.0-SNAPSHOT.pom [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.946 s [INFO] Finished at: 2024-09-09T13:14:36+08:00 [INFO] ------------------------------------------------------------------------
生成web工程
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4
E:\mavenproject\project02>mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4 [INFO] Scanning for projects... [INFO] [INFO] ------------------< org.apache.maven:standalone-pom >------------------- [INFO] Building Maven Stub Project (No POM) 1 [INFO] --------------------------------[ pom ]--------------------------------- [INFO] [INFO] >>> maven-archetype-plugin:3.2.1:generate (default-cli) > generate-sources @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:3.2.1:generate (default-cli) < generate-sources @ standalone-pom <<< [INFO] [INFO] [INFO] --- maven-archetype-plugin:3.2.1:generate (default-cli) @ standalone-pom --- [INFO] Generating project in Interactive mode [WARNING] No archetype found in remote catalog. Defaulting to internal catalog [INFO] Archetype repository not defined. Using the one from [org.apache.maven.archetypes:maven-archetype-webapp:1.0] found in catalog internal Define value for property 'groupId': com.sheeprunner.mvndemo Define value for property 'artifactId': promaven2web Define value for property 'version' 1.0-SNAPSHOT: : Define value for property 'package' com.sheeprunner.mvndemo: : Confirm properties configuration: groupId: com.sheeprunner.mvndemo artifactId: promaven2web version: 1.0-SNAPSHOT package: com.sheeprunner.mvndemo Y: : [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Archetype: maven-archetype-webapp:1.4 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: com.sheeprunner.mvndemo [INFO] Parameter: artifactId, Value: promaven2web [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: package, Value: com.sheeprunner.mvndemo [INFO] Parameter: packageInPathFormat, Value: com/sheeprunner/mvndemo [INFO] Parameter: package, Value: com.sheeprunner.mvndemo [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: groupId, Value: com.sheeprunner.mvndemo [INFO] Parameter: artifactId, Value: promaven2web [INFO] Project created from Archetype in dir: E:\mavenproject\project02\promaven2web [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 48.849 s [INFO] Finished at: 2024-09-09T13:18:39+08:00 [INFO] ------------------------------------------------------------------------
注意:为了能够正常编译,需要引入Servlet-api依赖,可以在mvn官方中央仓库网站查找。
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
E:\mavenproject\project02\promaven2web>mvn compile [INFO] Scanning for projects... [INFO] [INFO] ----------------< com.sheeprunner.mvndemo:promaven2web >---------------- [INFO] Building promaven2web Maven Webapp 1.0-SNAPSHOT [INFO] --------------------------------[ war ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ promaven2web --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2web\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ promaven2web --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to E:\mavenproject\project02\promaven2web\target\classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.724 s [INFO] Finished at: 2024-09-09T13:31:07+08:00 [INFO] ------------------------------------------------------------------------
打war包
生成的war包,复制到tomcat下,重启tomcat就能运行啦!
Web工程依赖Java工程
把Java工程的gav引入到web工程的pom.xml中,编译后就可以使用Java工程中的资源。
mvn dependency:list
打印依赖列表mvn dependency:tree
树形结构
继承与聚合
<packaging>pom</packaging>:子工程pom继承了父工程pom <modules> <!-- 构建父工程,子工程会按照依赖顺序依次构建 --> <!-- 假设son01依赖son02,son02依赖son03,则先构建son03,再构建son02,最后构建son01 --> <module>promaven2son01</module> <module>promaven2son02</module> <module>promaven2son03</module> </modules>
依赖工程
总结
- Maven是一款Java项目构建工具,管理jar包机器依赖关系。
- Maven命令:mvn [插件名]:[命令名],其实是执行插件的命令。
- Maven的GAV模型:GroupId:ArtifactId:VersionId,也成为坐标,唯一标识一个jar包。
- Maven POM模型:Project Object Model,Maven的配置文件,包括项目信息、依赖信息、插件信息等。
- Maven目录结构默认固定如下,继承于超级pom,思想是约定大于配置:
- pom.xml:项目配置文件
- src/main/java:源代码目录
- src/main/resources:资源文件目录
- src/test/java:测试代码目录
- src/test/resources:测试资源文件目录
- target:编译输出目录
- Maven的依赖管理:依赖管理是Maven的核心功能,通过依赖管理可以解决项目依赖关系的问题,有利于版本管理,避免依赖冲突。
- 理解生命周期
附录
一、maven依赖范围之system scope
- 引入一个本地的jar包(如本例中的达梦方言包未发不到中央仓库,随达梦数据库发布)
<dependency> <groupId>com.epoint.3rdparty</groupId> <artifactId>DmDialect-for-hibernate</artifactId> <version>5.3</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/lib/DmDialect-for-hibernate-5.3.jar</systemPath> </dependency> <dependency> <groupId>com.epoint.3rdparty</groupId> <artifactId>KingBaseDialect-for-hibernate</artifactId> <version>4.0</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/lib/KingBaseDialect-for-hibernate-4.0.jar</systemPath> </dependency>
二、maven的生命周期
以下内容来自文心灵码
Maven的生命周期是指项目构建过程中的一系列阶段,这些阶段按照特定的顺序执行,以达到构建、测试和部署项目的目的。Maven的生命周期主要包括以下三个阶段:
Clean Lifecycle(清理生命周期)
这个生命周期的目的是清理项目构建目录下的内容。它包含以下阶段:
- pre-clean:执行清理前需要完成的工作。
- clean:清理上一次构建生成的文件。
- post-clean:执行清理后需要完成的工作。
Default Lifecycle(默认生命周期)
这是Maven的主要生命周期,用于项目的构建。它包含以下阶段(按执行顺序):
- validate:验证项目是否正确,以及所有必要的信息是否可用。
- initialize:初始化构建状态,例如设置属性或创建目录。
- generate-sources:生成任何需要的源代码。
- process-sources:处理源代码,例如过滤任何值。
- generate-resources:生成资源文件。
- process-resources:复制并处理资源文件到目标目录。
- compile:编译项目的源代码。
- process-classes:后处理编译生成的文件,例如对Java类进行字节码增强。
- generate-test-sources:生成测试源代码。
- process-test-sources:处理测试源代码。
- generate-test-resources:生成测试资源文件。
- process-test-resources:复制并处理测试资源文件到测试目标目录。
- test-compile:编译测试源代码。
- process-test-classes:后处理测试编译生成的文件。
- test:使用合适的单元测试框架运行测试。
- prepare-package:在真正的打包之前,执行一些准备打包必要的操作。
- package:将编译好的代码打包成可分发的格式,如JAR、WAR等。
- pre-integration-test:执行集成测试之前需要完成的工作。
- integration-test:按照设定进行集成测试。
- post-integration-test:执行集成测试之后需要完成的工作。
- verify:运行任何检查,验证包是否有效且达到质量标准。
- install:将包安装到本地仓库,供其他项目使用。
- deploy:将最终的包复制到远程的仓库,供其他开发人员和项目共享。
Site Lifecycle(站点生命周期)
这个生命周期的目的是生成和发布项目的站点文档。它包含以下阶段:
- pre-site:执行一些需要在生成站点文档之前完成的工作。
- site:生成项目的站点文档。
- post-site:执行一些需要在生成站点文档之后完成的工作,如站点部署准备。
- site-deploy:将生成的站点文档部署到特定的服务器上。这些生命周期阶段是有序的,并且后面的阶段依赖于前面的阶段。你可以通过Maven命令来调用这些阶段,例如mvn clean install将会依次执行clean、validate、compile、test、package和install等阶段。
下篇预告:《Maven学习笔记(二):Maven基础(基于IDEA)》