Maven项目文档与快照

  |  

摘要: 本文介绍了 Maven 的项目文档以及快照的概念,并给出了简单例子说明。

【对算法,数学,计算机感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:算法题刷刷
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


Maven 文档

本章节我们主要学习如何创建 Maven 项目文档。

假设我们已经在在 MVN 目录下,用下面的命令来快速创建了 java 项目 consumerBanking:

1
2
3
4
mvn archetype:generate "-DgroupId=com.companyname.bank" \
"-DartifactId=consumerBanking" \
"-DarchetypeArtifactId=maven-archetype-quickstart" \
"-DinteractiveMode=false"

修改 pom.xml,在 中添加以下配置,在 mvn site 时需要:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.3</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.7</version>
</plugin>
</plugins>
</pluginManagement>

执行 mvn site,完成后在 target/site 下的 index.html 中就可以看到文档了。

Maven 快照

一个大型的软件应用通常包含多个模块,并且通常的场景是多个团队开发同一应用的不同模块。举个例子,设想一个团队开发应用的前端,项目为 app-ui(app-ui.jar:1.0),而另一个团队开发应用的后台,使用的项目是 data-service(data-service.jar:1.0)。

现在可能出现的情况是开发 data-service 的团队正在进行快节奏的 bug 修复或者项目改进,并且他们几乎每隔一天就要发布库到远程仓库。 现在如果 data-service 团队每隔一天上传一个新版本,那么将会出现下面的问题:

  • data-service 团队每次发布更新的代码时都要告知 app-ui 团队。
  • app-ui 团队需要经常地更新他们 pom.xml 文件到最新版本。

为了解决这种情况,快照的概念派上了用场。

快照的概念

快照是一种特殊的版本,指定了某个当前的开发进度的副本。

不同于常规的版本,Maven 每次构建都会在远程仓库中检查新的快照。现在 data-service 团队会每次发布更新代码的快照到仓库中,比如说 data-service:1.0-SNAPSHOT 来替代旧的快照 jar 包。

项目快照 vs 版本

对于版本,如果 Maven 以前下载过指定的版本文件,比如说 data-service:1.0,Maven 将不会再从仓库下载新的可用的 1.0 文件。若要下载更新的代码,data-service 的版本需要升到 1.1。

快照的情况下,每次 app-ui 团队构建他们的项目时,Maven 将自动获取最新的快照(data-service:1.0-SNAPSHOT)。

app-ui 项目的 pom.xml 文件

app-ui 项目使用的是 data-service 项目的 1.0 快照。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>app-ui</groupId>
<artifactId>app-ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>data-service</groupId>
<artifactId>data-service</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

data-service 项目的 pom.xml 文件

data-service 项目为每次小的改动发布 1.0 快照。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>data-service</groupId>
<artifactId>data-service</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>

快照的情况下,Maven 在日常工作中会自动获取最新的快照。

也可以在任何 maven 命令中使用 -U 参数强制 maven 下载最新的快照构建。例如 mvn clean package -U

在 MVN/app-service 目录,执行 mvn clean install,结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------< data-service:data-service >----------------------
[INFO] Building health 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ data-service ---
[INFO] Deleting /home/ppp/codes/java/MVN/data-service/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ data-service ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/ppp/codes/java/MVN/data-service/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ data-service ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ data-service ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/ppp/codes/java/MVN/data-service/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ data-service ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ data-service ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ data-service ---
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: /home/ppp/codes/java/MVN/data-service/target/data-service-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ data-service ---
[INFO] Installing /home/ppp/codes/java/MVN/data-service/target/data-service-1.0-SNAPSHOT.jar to /home/ppp/.m2/repository/data-service/data-service/1.0-SNAPSHOT/data-service-1.0-SNAPSHOT.jar
[INFO] Installing /home/ppp/codes/java/MVN/data-service/pom.xml to /home/ppp/.m2/repository/data-service/data-service/1.0-SNAPSHOT/data-service-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.753 s
[INFO] Finished at: 2022-05-30T23:21:25+08:00
[INFO] ------------------------------------------------------------------------

注意上面的第 32、33 行,项目被放进了本地仓库,便于 MVN/app-ui 拉取。

在 MVN/app-ui 目录,然后执行 mvn clean package -U,结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------------< app-ui:app-ui >----------------------------
[INFO] Building health 1.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ app-ui ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ app-ui ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/ppp/codes/java/MVN/data-ui/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ app-ui ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ app-ui ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/ppp/codes/java/MVN/data-ui/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ app-ui ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ app-ui ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ app-ui ---
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: /home/ppp/codes/java/MVN/data-ui/target/app-ui-1.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.697 s
[INFO] Finished at: 2022-05-30T23:17:22+08:00
[INFO] ------------------------------------------------------------------------

Share