本指南将引导您使用 Maven 构建一个简单的 Java 项目。
您将创建一个提供一天中的时间的应用程序,然后使用 Maven 构建它。
https://raw.githubusercontent.com/spring-guides/getting-started-macros/main/prereq_editor_jdk_maven_buildtools.adoc
https://raw.githubusercontent.com/spring-guides/getting-started-macros/main/how_to_complete_this_guide.adoc
首先,您需要设置一个 Java 项目以供 Maven 构建。为了将注意力集中在 Maven 上,现在使项目尽可能简单。在您选择的项目文件夹中创建此结构。
https://raw.githubusercontent.com/spring-guides/getting-started-macros/main/create_directory_struction_hello.adoc
在src/main/java/hello
目录中,您可以创建任何您想要的 Java 类。为了与本指南的其余部分保持一致,请创建这两个类: HelloWorld.java
和Greeter.java
。
src/main/java/hello/HelloWorld.java
link : initial / src / main / java / hello / HelloWorld . java [ role = include ]
src/main/java/hello/Greeter.java
link : initial / src / main / java / hello / Greeter . java [ role = include ]
现在您已经有了一个可以使用 Maven 构建的项目,下一步就是安装 Maven。
Maven 可作为 zip 文件从 https://maven.apache.org/download.cgi 下载。只需要二进制文件,因此请查找 apache-maven- {version} -bin.zip 或 apache-maven- {version} -bin.tar.gz 的链接。
下载 zip 文件后,将其解压缩到您的计算机。然后将bin文件夹添加到您的路径中。
要测试 Maven 安装,请从命令行运行mvn
:
mvn-v
如果一切顺利,您应该会看到一些有关 Maven 安装的信息。它看起来类似于(尽管可能略有不同)以下内容:
Apache Maven 3.3.9(bb52d8502b132ec0a5a3f4c09453c07478323dc5;2015-11-10T16:41:47 + 00:00) Maven 主页:/home/dsyer/Programs/apache-maven Java 版本:1.8.0_152,供应商:Azul Systems, Inc. Java 主目录:/home/dsyer/.sdkman/candidates/java/8u152-zulu/jre 默认区域设置:en_GB,平台编码:UTF-8 操作系统名称:“linux”,版本:“4.15.0-36-generic”,架构:“amd64”,系列:“unix”
恭喜!现在您已经安装了 Maven。
信息:您可能会考虑使用 Maven 包装器来使您的开发人员免于拥有正确版本的 Maven,或者根本不需要安装它。从 Spring Initializr 下载的项目包含包装器。它在项目的顶层显示为脚本mvnw
,您可以代替mvn
运行该脚本。
现在 Maven 已安装,您需要创建 Maven 项目定义。 Maven 项目是使用名为pom.xml的 XML 文件定义的。除此之外,该文件还提供了项目的名称、版本以及它对外部库的依赖关系。
在项目根目录下创建一个名为pom.xml的文件(即放在src
文件夹旁边)并为其提供以下内容:
pom.xml
link:initial/pom.xml[role=include]
除了可选的
元素之外,这是构建 Java 项目所需的最简单的pom.xml文件。它包括项目配置的以下详细信息:
。 POM 模型版本(始终为 4.0.0)。
。项目所属的团体或组织。通常表示为倒置域名。
。为项目的库工件指定的名称(例如,其 JAR 或 WAR 文件的名称)。
。正在构建的项目的版本。
- 项目应该如何打包。 JAR 文件打包默认为“jar”。使用“war”进行WAR文件打包。
笔记 | 在选择版本控制方案时,Spring 推荐语义版本控制方法。 |
此时,您已经定义了一个最小但功能强大的 Maven 项目。
Maven 现在已准备好构建项目。您现在可以使用 Maven 执行多个构建生命周期目标,包括编译项目代码、创建库包(例如 JAR 文件)以及在本地 Maven 依赖项存储库中安装库的目标。
要尝试构建,请在命令行中发出以下命令:
MVN编译
这将运行 Maven,告诉它执行编译目标。完成后,您应该在target/classes目录中找到编译后的.class文件。
由于您不太可能想要直接分发或使用.class文件,因此您可能需要运行包目标:
MVN包
打包目标将编译您的 Java 代码,运行任何测试,最后将代码打包到目标目录中的 JAR 文件中。 JAR 文件的名称将基于项目的
和
。例如,给定之前的最小pom.xml文件,JAR 文件将命名为gs-maven-0.1.0.jar 。
要执行 JAR 文件,请运行:
java -jar 目标/gs-maven-0.1.0.jar
笔记 | 如果您将 的值从“jar”更改为“war”,则结果将是目标目录中的 WAR 文件而不是 JAR 文件。 |
Maven 还在本地计算机上维护依赖项存储库(通常位于主目录中的.m2/repository目录中),以便快速访问项目依赖项。如果您想将项目的 JAR 文件安装到该本地存储库,那么您应该调用install
目标:
MVN安装
安装目标将编译、测试和打包项目的代码,然后将其复制到本地依赖项存储库中,为另一个项目将其作为依赖项引用做好准备。
说到依赖关系,现在是时候在 Maven 构建中声明依赖关系了。
简单的 Hello World 示例是完全独立的,不依赖于任何其他库。然而,大多数应用程序依赖外部库来处理常见和复杂的功能。
例如,假设除了说“Hello World!”之外,您还希望应用程序打印当前日期和时间。虽然您可以使用本机 Java 库中的日期和时间工具,但使用 Joda Time 库可以让事情变得更有趣。
首先,将 HelloWorld.java 更改为如下所示:
src/main/java/hello/HelloWorld.java
link : complete / src / main / java / hello / HelloWorld . java [ role = include ]
这里HelloWorld
使用Joda Time的LocalTime
类来获取并打印当前时间。
如果您现在运行mvn compile
来构建项目,构建将会失败,因为您没有在构建中将 Joda Time 声明为编译依赖项。您可以通过将以下行添加到pom.xml (在
元素内)来解决此问题:
< dependencies >
link:complete/pom.xml[role=include]
dependencies >
此 XML 块声明了项目的依赖项列表。具体来说,它声明了 Joda Time 库的单个依赖项。在
元素中,依赖坐标由三个子元素定义:
- 依赖项所属的组或组织。
- 所需的库。
- 所需的库的特定版本。
默认情况下,所有依赖项都属于compile
依赖项。也就是说,它们应该在编译时可用(如果您正在构建 WAR 文件,包括在 WAR 的/WEB-INF/libs文件夹中)。此外,您可以指定
元素来指定以下范围之一:
provided
- 编译项目代码所需的依赖项,但将在运行时由运行代码的容器提供(例如,Java Servlet API)。
test
- 用于编译和运行测试的依赖项,但构建或运行项目的运行时代码不需要。
现在,如果您运行mvn compile
或mvn package
,Maven 应该从 Maven 中央存储库解析 Joda Time 依赖项,并且构建将会成功。
首先在测试范围内将 JUnit 添加为 pom.xml 的依赖项:
link:complete/pom.xml[role=include]
然后创建一个像这样的测试用例:
src/test/java/hello/GreeterTest.java
link : complete / src / test / java / hello / GreeterTest . java [ role = include ]
Maven 使用名为“surefire”的插件来运行单元测试。该插件的默认配置会编译并运行src/test/java
中名称与*Test
匹配的所有类。您可以像这样在命令行上运行测试
MVN测试
或者只是使用我们上面已经展示的mvn install
步骤(有一个生命周期定义,其中“test”作为“install”中的一个阶段包含在内)。
这是完成的pom.xml
文件:
pom.xml
link:complete/pom.xml[role=include]
笔记 | 完成的pom.xml文件使用 Maven Shade 插件,以便于使 JAR 文件可执行。本指南的重点是 Maven 入门,而不是使用这个特定的插件。 |
恭喜!您已经创建了一个简单而有效的 Maven 项目定义来构建 Java 项目。
以下指南也可能有帮助:
使用 Gradle 构建 Java 项目
https://raw.githubusercontent.com/spring-guides/getting-started-macros/main/footer.adoc