介绍
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。
安装
- 安装jdk
- 安装maven
- 配置环境变量
仓库
Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
Maven 仓库有三种类型:
- 本地资源库
Maven的本地资源库是用来存储所有项目的依赖关系(插件jar和其他文件,这些文件被Maven下载)到本地文件夹。很简单,当你建立一个Maven项目,所有相关文件将被存储在你的Maven本地仓库。默认情况下,Maven的本地资源库默认为 .m2 目录文件夹。通常情况下,可改变默认的 .m2 目录下的默认本地存储库文件夹到其他更有意义的名称。 - 中央存储库
当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载。首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库 – https://search.maven.org/查找下载。 - 远程存储库
在Maven中,当你声明的库不存在于本地存储库中,也不存在于Maven中心储存库,该过程将停止并将错误消息输出到 Maven 控制台。它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
你需要声明远程仓库在 pom.xml 文件这样:
e.g. 声明Java.net储存库
<repositories>
<repository>
<id>java.net</id>
<url>https://maven.java.net/content/repositories/public/</url>
</repository>
</repositories>
现在,Maven的依赖库查询顺序更改为:
- 在 Maven 本地资源库中搜索,如果没有找到,进入第 2 步,否则退出。
- 在 Maven 中央存储库搜索,如果没有找到,进入第 3 步,否则退出。
- 在java.net Maven的远程存储库搜索,如果没有找到,提示错误信息,否则退出
坐标
e.g.
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
</dependencies>
当 Maven 编译或构建,log4j 的 jar 会自动下载,并把它放到 Maven 本地存储库,所有由 Maven 管理。
访问 Maven 中心储存库,搜索下载您想要的jar,找到 Maven 坐标。
生命周期
Maven 有以下三个标准的生命周期:
#1. 项目清理的处理
mvn clean #删除target目录
#2. 项目构建(build)的处理
mvn compile #编译该项目的源代码
mvn test #运行测试使用合适的单元测试框架(JUnit)
mvn package #提取编译后的代码,并在其分发格式打包,如JAR,WAR或EAR文件
mvn install #将包安装到本地存储库,它可以用作当地其他项目的依赖
mvn deploy #复制最终的包到远程仓库与其他开发者和项目共享
#3. 项目站点文档创建的处理
mvn site #生成项目的站点文档
当一个阶段通过 Maven 命令调用时,例如 mvn compile,只有该阶段之前以及包括该阶段在内的所有阶段会被执行。
每个生命周期中都包含着一系列的阶段(phase)。这些 phase 就相当于 Maven 提供的统一的接口,然后这些 phase 的实现由 Maven 的插件来完成。
我们在输入 mvn 命令的时候 比如 mvn clean,clean 对应的就是 Clean 生命周期中的 clean 阶段。但是 clean 的具体操作是由 maven-clean-plugin 来实现的。
所以说 Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的
POM
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
e.g.
<properties>
<jdk.version>1.8</jdk.version>
<junit.version>4.11</junit.version>
<jstl.version>1.2</jstl.version>
</properties>
<dependencies>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!--日志类型-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${jcl-over-slf4j.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--添加编译器插件来告诉 Maven 使用哪个 JDK 版本是用来编译项目-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
</configuration>
</plugin>
</plugins>
</build>
构建Java项目
要创建一个简单的 Java 应用,我们将使用 maven-archetype-quickstart 插件。
在下面的例子中,我们将在 C:\MVN 文件夹下创建一个基于 maven 的 java 应用项目。
命令格式如下:
mvn archetype:generate -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
参数说明:
- -DgourpId: 组织名,公司网址的反写 + 项目名称
- -DartifactId: 项目名-模块名
- -DarchetypeArtifactId: 指定 ArchetypeId,maven-archetype-quickstart,创建一个简单的 Java 应用
- -DinteractiveMode: 是否使用交互模式
网友评论