Spring-使用Maven构建Java项目

目标

创建一个提供一天中的时间都应用程序,并使用 Maven 进行构建。

创建项目

首先,需要创建一个 Java 项目,来提供给 Maven 进行构建。为了确保注意力集中在 Maven 上,尽可能确保项目足够简单。在你所选择的项目根目录中创建如下目录结构。

创建目录结构

在你所选择的项目根目录中创建如下目录结构,如,使用命令 mkdir -p src/main/java/hello 创建:

1
2
3
4
5
.
└── src
└── main
└── java
└── hello

在 src/main/java/hello 目录中,你可以创建任意 Java 类。为了保持和其余指南的一致性,这里创建两个类文件:HelloWorld.java 和 Greeter.java

src/main/java/hello/HelloWorld.java

1
2
3
4
5
6
7
8
package hello;

public class HelloWorld {
public static void main(String[] args) {
Greeter greeter = new Greeter();
System.out.println(greeter.sayHello());
}
}

src/main/java/hello/Greeter.java

1
2
3
4
5
6
7
package hello;

public class Greeter {
public String sayHello() {
return "Hello world!";
}
}

安装 maven 可以从 https://maven.apache.org/download.cgi 下载一个 zip 压缩文件,只需要下载二进制文件即可,所以可以在下载列表中类似 apache-maven-{version}-bin.zip or apache-maven-{version}-bin.tar.gz 的文件进行下载。

下载后,解压压缩文件,然后将其中的 bin 目录添加到 PATH 中即可。

测试 maven 安装到命令:mvn -v

定义一个简单的 Maven 构建

Maven 项目是用一个 pom.xml 的 XML 文件定义的。该文件给出了项目名称,版本以及所有需要的外部依赖库。

因此,进行项目根目录,创建 pom.xml 文件。

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
40
41
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.springframework</groupId>
<artifactId>gs-maven</artifactId>
<packaging>jar</packaging>
<version>0.1.0</version>

<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>hello.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

除了可选的标签外,上面基本上是一个最简单的可用来构建 Java 项目的 pom.xml,主要包含了一下几个配置项:

  • POM 模型版本(总是 4.0.0)
  • 项目所属的组织或机构,通常用一个倒置的域名表示。
  • 项目的库构件的名称(例如,JAR或WAR文件的名称)
  • 项目构建时的版本
  • 项目应被如何打包,默认为 jar 也就是打包为 JAR 文件,设置为 war 则表示打包为 WAR 文件。

注:这里的版本使用的是 Semantic Versioning 的规范。
Given a version number MAJOR.MINOR.PATCH, increment the:

  1. MAJOR version when you make incompatible API changes
  2. MINOR version when you add functionality in a backwards compatible manner
  3. PATCH version when you make backwards compatible bug fixes

    Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.

构建 Java 代码

尝试构建,可以使用下面的命令
mvn compile

该命令会运行 Maven 来对 Java 代码进行编译,最终得到 classes 文件

mvn package 命令则会编译并打包,最终生成一个可执行的 jar 文件。

Maven 还会维护一个本地依赖库(一般在一个用户home目录下的 .m2/repository 文件夹中)来为项目依赖提供快速的访问。如果你想要把你项目 JAR 文件安装到本地依赖库中,可以使用 mvn install 命令。

该命令会将你的项目代码编译、测试、打包,然后复制到本地依赖仓库中,留给以后别的项目作为依赖来引用。

定义依赖

添加 Joda Time 库用来打印当前日期和时间。
首先,修改 HelloWorld.java

1
2
3
4
5
6
7
8
9
10
11
12
package hello;

import org.joda.time.LocalTime;

public class HelloWorld {
public static void main(String[] args) {
LocalTime currentTime = new LocalTime();
System.out.println("The current local time is: " + currentTime);
Greeter greeter = new Greeter();
System.out.println(greeter.sayHello());
}
}

在 pom.xml 中添加依赖

1
2
3
4
5
6
7
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.2</version>
</dependency>
<dependencies>

该 XML 代码块定义了一个这个项目的依赖列表,列表中定义了一个 Joda Time 库的依赖。

元素中,依赖的定义由三个子元素组成:

  1. - 依赖所属组织或机构
  2. - 需要的库
  3. - 需要的库的版本

默认所有的依赖都是被看作 compile 依赖的。也就是说,这些依赖应该在编译期间可用(如果你正在构建的是 WAR 文件,包含在 WAR 包的 /WEB-INF/libs 目录)。

另外,你可以指定 元素来指定以下作用域:

  • provided - 编译项目代码时需要的依赖,但是将会被容器在运行代码时提供。(如 Java Servlet API)
  • test - 编译和运行测试时需要使用的依赖,但不会在构建或者运行项目运行时代码时需要。

现在,如果你使用 mvn compilemvn package 命令,Maven 应该会从 Maven 中央仓库中找到 Joda Time 依赖并成功构建项目。

编写测试

首先添加 JUnit 依赖,在 pom.xml 中添加:

1
2
3
4
5
6
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

然后编写测试文件 src/test/java/hello/GreeterTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package hello;

import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.*;

import org.junit.Test;

public class GreeterTest {

private Greeter greeter = new Greeter();

@Test
public void greeterSaysHello() {
assertThat(greeter.sayHello(), containsString("Hello"));
}

}

Maven 使用一个叫做 “surefire” 的插件来运行单元测试。该插件的默认配置会编译并运行 src/test/java 文件夹内所有文件名匹配 *Test 的类文件。你可以使用 mvn test 命令来运行该测试,或者使用 mvn install (test 包含在 install 会进行的所有操作中)

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022 qusong
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信