maven 学习
手动创建一个 maven 项目
maven 项目包结构
1.首先创建一个如下的目录结构,然后再与 project name 同级目录下创建 pom.xml 可以复制如下
+-- project name
| +-- pom.xml
| +-- src
| | +-- main
| | | +-- java
| | | | +-- java源文件
| | | +-- source 资源文件 图片等等
| | +-- test
| | | +-- java
| | | | +-- java源文件
| | | +-- source 资源文件 图片等等
2.目录创建完毕,需要编写 pom.xml 文件,可以复制下面的,在此过程中,需要配置
groupId, artifactId, version, dependencies 属性,配置说明如下.
pom.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--配置 JDK 的版本-->
<!--避免出现如下错误信息-->
<!--
[ERROR] 不再支持源选项 5.请使用 6 或更高版本.
[ERROR] 不再支持目标选项 1.5.请使用 1.6 或更高版本.
-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<!--此处根据你使用的 JDK 版本,修改下面三处-->
<java.version>10</java.version>
<maven.compiler.source>10</maven.compiler.source>
<maven.compiler.target>10</maven.compiler.target>
</properties>
<!--组名,一般是公司的域名的倒写 + 工程名-->
<groupId>xyz.snowflake.maven01</groupId>
<!--模块名,一般是工程名+ 模块名-->
<artifactId>maven01-model</artifactId>
<!--版本号,可以直接复制-->
<version>0.0.1SNAPSHOT</version>
<!--配置打包方式,默认为 jar-->
<packaging>jar</packaging>
<!--配置依赖,可以直接复制-->
<dependencies>
<!--配置 junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>
3.完成上述后,可以打开控制台,进入到 project name 文件夹下,执行以下命令
- mvn compile
- 编译 main 文件下的 java 源文件,此过程会下载一些依赖,并且会生成 target 文件夹
- mvn test
- 测试
maven 常用命令
mvn -v 查看 maven 的版本
compile 编译 main 的文件夹下的源文件(java 文件)
test 测试
package 打包项目,生成一个.jar 文件(默认生成一个.jar文件,也可以生成 .war .pom .zip文件)
clean 清除编译生成的 target 文件夹
自动创建目录的两种方式
- mvn archetype:generate
按照提示来创建目录 - mvn archetype:generate -DgroupId= -DartifactId= -Dversion=1.0.0SNAPSHOT -Dpackage=
-DgroupId= | -DartifactId= | -Dversion=1.0.0SNAPSHOT | -Dpackage= |
---|---|---|---|
组织名 | 项目名-模块名 | 版本号 | 包名 |
[注] : 不需要引号
- 坐标(由groupId artifactId version定位)
- 构件
- 仓库
- 仓库分为本地仓库和远程仓库
- 注:如果本地仓库没有找到所需要的依赖,会访问全球仓库,然后自动下载到本地舱中
- 全球仓库地址:
- 默认的全球仓库地址:https://repo.maven.apache.org/maven2/
- 镜像仓库:
- 需求的条件,如果无法直接访问外国的一些依赖,此时会需要到访问国内的镜像仓库.
- 修改镜像仓库地址 : 需要修改 setting.xml 文件,修改 mirrors 标签
- mirrorOf : 为哪个仓库做镜像
- *: 表示全部仓库
- 一旦配置镜像,将不能访问源镜像,会直接访问镜像地址
- 更改本地仓库地址:
- 修改 setting.xml 文件中的 localRepository 标签,修改本地文件夹地址,并建一个 repo 文件夹作为本地仓库
- 并且将 setting.xml 文件复制到 repo 文件夹
maven 生命周期
- 完整的项目构建过程包括 : 清理, 编译, 测试, 打包, 集成测试, 验证, 部署
插件的作用
- 插件是对 maven 的具体实现
maven 定义了三套相互独立的生命周期
- clean 清理项目
- pre-clean 执行清理前的工作
- clean 清理上一次构建生成的所有文件
- post-clean 执行清理后的文件
- default(最核心) 构建项目
- 会执行 compile test package install 等命令
- site 生成项目站点(根据pom.xml文件自动生成站点)
- pre-site 在 生成项目站点前要完成的工作
- site 生成项目的站点文档
- post-site 在生成项目站点后要完成的工作
- site-deploy 发布生成的站点到服务器上
添加插件的代码事例
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<rtifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<!--执行阶段-->
<executions>
<execution>
<phase>package</phase>
<!--执行的目标-->
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
[注] build 标签是在 project 标签下一级
pom.xml 文件中主要元素说明
<!--项目的约束条件-->
<project>
<!--指定当前 pom 的版本-->
<modelVersion>4.0.0</modelVersion>
<!--坐标信息-->
<groupId>反写的公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<!--
第一个 0 表示大版本号
第二个 0 表示分支版本号
第三个 0 表示小版本号
0.0.1
snapshot 快照
alpha 内部测试版本
beta 公测版本
release 稳定版本
GA 正式发布
-->
<version>1.0.0-SNAPSHOT</version>
<!--打包方式 默认是 jar 还可以为 war zip pom-->
<packaging>jar</packaging>
<!--项目描述名,产生描述文档时使用-->
<name></name>
<!--项目地址-->
<url></url>
<!--项目描述-->
<description></description>
<!--项目开发人员-->
<developers></developers>
<!--许可证信息,一些开源框架的许可证信息-->
<licenses></licenses>
<!--组织信息-->
<organization></organization>
<!--添加一些依赖信息-->
<dependencies>
<!--配置 junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<type></type>
<!--依赖作用范围-->
<scope></scope>
<!--
设置依赖是否可选,默认为false,
如果是false,子项目是自动继承;
如果是true,子项目必须写入引用给依赖
-->
<optional></optional>
<!--排除此依赖依赖的其他依赖-->
<exclusions>
<!--可以填写多个依赖-->
<exclusion>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!--依赖的管理-->
<dependencyManagement>
<!--
例如多个项目都需要 junit ,此时可以将其抽象出来,供子类继承
-->
<dependency></dependency>
</dependencyManagement>
<build>
<!--插件列表,可以有多个插件-->
<plugins>
<groupId>org.apache.maven.plugins</groupId>
<rtifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<!--执行阶段-->
<executions>
<execution>
<phase>package</phase>
<!--执行的目标-->
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugins>
</build>
<!--父模块-->
<parent></parent>
<!--聚合多个模块,可以在一起编译多个模块-->
<modules></modules>
</project>
添加依赖的原则
- 短路优先
- 先定义优先
建议 : 在创建java包名时,建议与 groupId 一致