| tags |
|
|
|---|---|---|
| projects |
本指南引导您通过使用Maven构建一个简单的java项目。
-
大概15分钟
-
一个你喜欢的文本编辑器或IDE
-
JDK 6 或更新的版本
首先你需要建立一个用来maven构建的Java项目。为了把焦点集中在Maven,我们现在使项目尽可能简单。
在 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。
可以在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项目在一个叫 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项目定义。
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 compile 或 mvn 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,而不是使用特定的插件。 |