Skip to content

webGoBetter/gs-maven

Repository files navigation

tags
maven
projects

本指南引导您通过使用Maven构建一个简单的java项目。

你将构建什么

你会创建一个提供了当天时间的应用程序,然后用Maven构建它。

你需要什么

  • 大概15分钟

  • 一个你喜欢的文本编辑器或IDE

  • JDK 6 或更新的版本

建立项目

首先你需要建立一个用来maven构建的Java项目。为了把焦点集中在Maven,我们现在使项目尽可能简单。

src/main/java/hello 目录下, 你能创建一个你想要的Java类。为了保持与本指南其余部分的一致性,创建这两个类: HelloWorld.javaGreeter.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。

可以在http://maven.apache.org/download.cgi下载Maven的zip文件。只有二进制文件是必需的,所以寻找 apache-maven-{version}-bin.zip 或A apache-maven-{version}-bin.tar.gz 的链接。

一旦你已经下载压缩文件,解压缩到您的计算机。然后加入 bin 文件夹到你的路径。

测试Maven的安装,在命令行运行 mvn

mvn -v

如果一切顺利,你应该得到一些关于Maven的安装信息。它看起来类似于(尽管可能略有不同)以下:

Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 07:51:28-0600)
Maven home: /usr/share/maven
Java version: 1.7.0_09, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.8.3", arch: "x86_64", family: "mac"

祝贺你!你现在已经装好Maven。

定义一个简单的Maven构建

现在Maven已经安装,你需要创建一个Maven项目定义。Maven项目在一个叫 pom.xml 的XML文件中定义。除此之外,这个文件给出了项目在外部库上的名称、版本和依赖项。

在项目的根目录下创建一个名为 pom.xml 的文件,下面是它的的内容:

pom.xml

link:initial/pom.xml[role=include]

除了可选的 <packaging> 元素,这可能是创建一个java项目所需要的最简单的 pom.xml 文件。它包含了项目配置的以下详细信息:

  • <modelVersion>. POM模型版本(总是 4.0.0).

  • <groupId>. 项目属于的组或组织。常用反向域名表示。

  • <artifactId>. 要给项目的库工件(library artifact)(例如,它的JAR或WAR文件的名称)的名称。

  • <version>. 该项目正在建造的版本。

  • <packaging> - 项目应该如何打包。JAR文件打包的默认值是 "jar"。使用 "war" 进行WAR文件打包。

Note
当谈到选择版本控制方案,Spring推荐 [semantic versioning](http://semver.org) 的方法。

在目前你有一个最小的,但有能力的Maven项目定义。

构建Java代码

Maven已经为构建项目准备好了。你现在可以用Maven执行几个构建生命周期的目标,包括编制项目代码的目标,创建一个封装库(如JAR文件),并在本地Maven依赖库安装库。

要尝试构建,在命令行运行以下命令:

mvn compile

这会运行Maven,告诉它执行 compile 的目标。当它完成的时候,你应该能够在 target/classes 目录下找到编译后的 .class 文件。

因为你几乎不能可能想直接分发或使用 .class 文件,反倒你可能想运行 package 的目标:

mvn package

package 目标将编译你的java代码,运行测试,并在 target 目录完成包装代码到一个JAR文件。JAR文件的名字将基于项目的 <artifactId><version> 。例如,之前给定的最小 pom.xml 文件,JAR文件将被命名为 gs-maven-0.1.0.jar

Note
如果你将 <packaging> 的值从 "jar" 改到 "war",结果 target 目录下将不是一个jar文件而是war文件。

Maven还维护了在本地机器上存储的依赖(通常在你的home目录的 .m2/repository 目录下),为了快速访问项目依赖项。如果您想将项目的JAR文件安装到本地库,那么您应该调用 install 目标:

mvn install

install 目标编译,测试,打包你的项目的代码,然后复制到本地的依赖库,为另一个项目引用它为一个依赖做准备。

说到依赖,现在是时候在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 (在 <project> 元素中)解决:

<dependencies>
link:complete/pom.xml[role=include]
</dependencies>

此XML块声明项目的依赖项列表。具体地说,它声明Joda Time库为一个依赖。在 <dependency> 元素中,依赖项坐标由三个子元素定义:

  • <groupId> - 项目属于的组或组织。

  • <artifactId> - 所需的库。

  • <version> - 该库所需要的特定版本。

默认情况下,所有依赖限制在 compile 依赖的范围(scope)。那就是,他们应该可以在编译时有效的(如果你正在建立一个 WAR 的文件,应该包含在WAR的 /WEB-INF/libs 的文件夹里)。另外,您可以指定一个 <scope> 元素,指定为下面的scopes:

  • provided - 是编制项目代码所需的依赖,但会在运行代码的容器的运行时(runtime)提供(例如,Java Servlet API)。

  • test - 编译和运行测试所需的依赖, 但是不是构建或者运行项目运行时代码所需的。

现在,如果你运行 mvn compilemvn package ,Maven应该从Maven的中央存储库解析到Joda Time的依赖,构建将会成功。

写单元测试

首先在你的pom.xml文件,添加JUnit作为一个在测试范围依赖于:

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 test

或只是运行 mvn install 的这一步骤,像我们上面已经展示了的。(有一个生命周期的定义, "test" 是作为 "install" 一个阶段的)。

这里是已完成的文件:

pom.xml

link:complete/pom.xml[role=include]
Note
完整的 pom.xml 文件是使用了 Maven Shade Plugin 以简单方便的方式使JAR文件的可以被执行。本指南的重点是开始使用Maven,而不是使用特定的插件。

总结

祝贺你!你已经为构建java项目创建了一个简单而有效的Maven项目定义。

About

使用Maven构建Java项目 :: 学会如何使用Maven构建Java项目。

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors