本文翻译自http://spring.io/guides/gs/maven/#scratch。
http://blog.youkuaiyun.com/u010902721/article/details/51203170
这篇文章将会引导你使用maven构建一个简单的java项目。
下面你将构建什么项目?
下面你将会创建一个关于系统时间的项目,然后通过maven构建它。
你需要的东西
- 大约15分钟的时间;
- 一个你喜欢的文本编辑器或者IDE;
- JDK6以上。
建立工程
首先你需要创建一个JAVA工程,然后使用maven构建它。为了把注意力放到maven上,现在让你的JAVA工程尽可能简单。
创建目录结构
在你选择的项目目录下,创建如下所示的子目录结构。例如,可以在类unix系统上使用命令mkdir -p src/main/java/hello
创建目录。
└── src
└── main
└── java
└── hello
在目录src/main/java/hello
下,你可以创建任何java类。我们先创建两个类HelloWorld.java
和Greeter.java
。
//文件src/main/java/hello/HelloWorld.java
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
package hello;
public class Greeter {
public String sayHello() {
return "Hello world!";
}
}
现在我们有了一个可以用maven构建的项目了,下一步就是安装maven。可以从 http://maven.apache.org/download.cgi下载maven的压缩包。我们只需要二进制包,所以在下载页面找apache-maven-{version}-bin.zip或者apache-maven-{version}-bin.tar.gz。
下载压缩包并解压到你想放置的目录后,把里面的bin目录放到你的系统变量里。例如我的电脑里是把D:\Program Files (x86)\Apache Software Foundation\apache-maven-3.3.9\bin
放到了系统变量里。
在命令行使用mvn -v
命令检查maven是否被成功安装。如果一切顺利,你将看到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文件定义的。这个文件中注明了java项目的名称、版本号和依赖的外部库等。
在之前创建的项目根目录中新建文件pom.xml,内容如下:
<?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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-maven</artifactId>
<packaging>jar</packaging>
<version>0.1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</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>
除了可选的< packaging>元素之外,这是构建java项目所必须的最简单的pom.xml文件。它包含了项目配置的如下细节。
- < modelVersion>. POM 的版本号 (总是 4.0.0).
- < groupId>. 这个java项目所属的公司或者组织.
- < artifactId>. 工程名字。(例如, 使用构建出来的JAR或者WAR文件的名字).
- < version>. 本工程的版本号.
- < packaging> - 打包方式. 默认是”jar”.也可以使用”war” 打包成war包.
至此,你创建了一个最简单的maven项目。
编译java代码
现在可以使用maven构建你的项目了。可以使用maven编译项目代码、打包(jar包或者war包)或者将包安装到本地的maven依赖仓库。
使用如下的命令编译项目代码:
mvn compile
编译完成之后,将会在target或者classes目录下看到编译好的.class文件。
由于你不太可能直接发布.class文件,使用mvn package
命令会编译你的java代码、执行你的测试向量,最后将你的代码打包成jar或者war包,并发布到项目的target目录下。jar包的名字将会根据pom.xml文件中配置的<artifactId>
和<version>
命名。例如,根据之前pom.xml文件构建的jar包的名字将是gs-maven-0.1.0.jar。
maven会在你的机器上维护一个本地依赖库(通常在安装根目录下.m2/repository) 来快速获取项目的依赖包。如果你想把你发布的jar包安装到maven的本地依赖库,执行mvn install
。这条命令将会编译、测试、打包你的项目代码,并拷贝到maven的本地依赖库,使得其他项目可以依赖你的这个包。
说到依赖,现在讲讲在pom.xml中声明依赖。
在pom.xml中声明依赖(dependencies)
之前的helloworld例子完全没有依赖任何的外部包,大多数的项目将会依赖外部包完成公共的或者复杂的功能。
例如,在刚才的项目中你想加入日期和时间的功能,尽管你可以使用java的原生库完成,你也可以使用Joda时间库使事情更有趣。
把HelloWorld.java的代码更改成如下形式:
//文件src/main/java/hello/HelloWorld.java
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());
}
}
这里HelloWorld类使用Joda时间库中LocalTime类来获得和打印当前时间。如果你现在使用mvn compile
命令编译项目,你将会失败,因为你还没有在pom.xml文件中声明Joda时间库作为项目依赖。你可以在pom.xml的<project>
元素下添加如下内容来解决依赖错误。
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
这段xml代码声明了项目所需要的所有的依赖库。这里只声明了一个joda-time。在<dependency>
元素中,使用三个子元素定位一个外部依赖库。
- groupId 这个库所属的组织或者公司。
- artifactId 依赖的库的名字。
- version 依赖的库版本号。
默认所有的依赖都是在编译期的依赖,也就是说在编译期能够获取那些依赖包。另外,也可以使用<scope>
元素指定为以下scope:
1. <provided>
这些依赖将会将会在编译器被使用,另外执行期也要使用。例如Java Servlet API。
2. <test>
这些依赖被用在编译期和执行测试用例的时候,在build和执行期不会被使用。
现在如果你执行mvn compile
命令或者mvn package
命令,maven应该能够在maven的中心仓库中找到Joda time依赖,这两条命令将会执行成功。
完整的pom.xml文件如下:
<?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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-maven</artifactId>
<packaging>jar</packaging>
<version>0.1.0</version>
<!-- tag::joda[] -->
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
<!-- end::joda[] -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</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>
总结
祝贺你,您已经创建了一个简单但有效的Maven项目。