使用Maven构建Java工程(Building Java Projects with Maven)

来源:互联网 发布:golang与java哪个好 编辑:程序博客网 时间:2024/06/05 13:26

Building Java Projects with Maven

本文采用maven构建一个简单的java工程。

工程描述

你将实现一个显示时间的应用,并采用maven构建它。

准备工作

  • 大约15分钟
  • 一个文本编辑器或者IDE
  • JDK 6或更高

如何完成

如同所有的Spring入门教程,你可以选择一步一步的自己实现,也可以跳过基本的设置步骤。最终,你都将得到一份可以正常运行的代码。

如果选择按步实现,继续下一节。

如果选择跳过基本的安装部分,则执行以下命令从github获取代码:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. git clone https://github.com/spring-guides/gs-maven.git  

切换当前目录到gs-maven/initial,跳到安装Maven步骤

设置工程

首先,要创建一个java工程。

创建目录结构

在你选定的工程目录下,建立如下子目录结构;例如,在*nix系统中使用mkdir -p src/main/java/hello命令:

└── src    └── main        └── java            └── hello
在src/main/java/hello目录下,可以创建任何java类文件。这里我们创建两个文件作为示例:HelloWorld.java和Greeter.java。两个文件的源代码如下。

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package hello;  
  2.   
  3. public class HelloWorld {  
  4.     public static void main(String[] args) {  
  5.         Greeter greeter = new Greeter();  
  6.         System.out.println(greeter.sayHello());  
  7.     }  
  8. }  

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package hello;  
  2.   
  3. public class Greeter {  
  4.     public String sayHello() {  
  5.         return "Hello world!";  
  6.     }  
  7. }  

现在已经创建了一个java工程,下一步是安装maven

Maven可以从http://maven.apache.org/download.cgi下载。只需要二进制文件,即apache-maven-{version}-bin.zip或者apache-maven-{version}-bin.tar.gz文件。

下载zip文件后,解压,并把其bin目录添加到系统path中。(环境变量)

可以执行以下命令,测试Maven是否安装成功:mvn -v。如果安装成功,则会得到类似的输出:

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

定义一个简单的Maven build

Maven已经安装成功,现在要创建一个Maven工程定义。Maven工程通过一个称作pom.xml的XML文件定义。这个文件描述了工程的名称、版本、依赖(dependencies)等。

在工程根目录下创建pom.xml文件,并写入以下内容:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  4.     <modelVersion>4.0.0</modelVersion>  
  5.     <groupId>org.springframework.gs</groupId>  
  6.     <artifactId>gs-maven-initial</artifactId>  
  7.     <version>0.1.0</version>  
  8.     <packaging>jar</packaging>  
  9. </project>  

除了<packaging>标签外,这是一个pom.xml文件的最精简配置。它包含了工程配置的下述细节:
  • <modelVersion>。POM 模型版本(通常是4.0.0)
  • <groupId>。工程隶属的团体或组织。通常采用逆序的域名。
  • <artifactId>。工程库文件的名称。(如,工程的jar文件或war文件的名称)
  • <version>。工程的版本
  • <packaging>。工程如何打包。默认为“jar”采用JAR打包,“war”采用WAR打包。

如果需要选择版本方案,Spring推荐使用[semantic versioning](http://semver.org)。现在,我们有了一个最小的可用的Maven工程。

Build Java Code

Maven目前已经准备就绪。你可以采用Maven执行多个构建生命周期目标,包括编译工程代码,创建库包(例如jar包),把库安装到本地Maven依赖仓库。

执行下述命令:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. mvn compile  

这条命令指示Maven执行compile目标。执行结束后,target/classes 目录下将生成.class文件。

由于我们不太可能想要直接发布或使用.class文件,因此下一步需要执行package目标:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. mvn package  

package目标将会编译java代码、执行所有的测试、最后将代码打包到target目录下的一个jar文件中。该jar文件的文件名基于工程的<artifactId>和<version>配置。例如,根据前述的pom.xml文件的配置,JAR文件的名称为gs-maven-initial-0.1.0.jar。

如果把<packaging>项的值设置从“jar”改为“war”,target目录下将生成一个WAR文件。

Maven也在本地维护了一个依赖仓库以支持快速访问工程依赖(本地仓库通常位于用户根目录中的.m2/repository目录下)。如果你想把你的JAR文件添加到本地仓库中,执行以下install目标:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. mvn install  

install目标将会编译、测试、打包、并将其复制到本地仓库中。这样其他工程就可以引用它。

下面介绍声明dependencies。

声明dependencies

上述的Hello World示例是自包含的,没有依赖任何其他的库。但是,多数的应用程序都会依赖外部库处理一些公共逻辑和复杂功能。

例如,你想在上面的工程中再添加一个打印当前时间的功能。虽然你可以使用java原生库提供的功能,但是Joda时间库提供了更多有趣的功能。

首先,修改HelloWorld.java文件:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package hello;  
  2.   
  3. import org.joda.time.LocalTime;  
  4.   
  5. public class HelloWorld {  
  6.   public static void main(String[] args) {  
  7.     LocalTime currentTime = new LocalTime();  
  8.     System.out.println("The current local time is: " + currentTime);  
  9.   
  10.     Greeter greeter = new Greeter();  
  11.     System.out.println(greeter.sayHello());  
  12.   }  
  13. }  

HelloWorld采用Joda Time的LocalTime类来获取和打印当前时间。

现在执行mvn compile来构建工程,构建就会失败,这是由于你还没有将Joda Time声明为一个依赖。这就需要在pom.xml中添加一下行(在<project>元素内):

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <dependencies>  
  2.     <dependency>  
  3.         <groupId>joda-time</groupId>  
  4.         <artifactId>joda-time</artifactId>  
  5.         <version>2.2</version>  
  6.     </dependency>  
  7. </dependencies>  

上述配置声明了工程的依赖列表。在这里只声明了一个Joda Time库的依赖。在<dependency>元素内,包含以下三个子元素:
  • <groupId>。依赖隶属的组织或机构。
  • <artifactId>。库。
  • <version>。版本。

默认情况下,所有的依赖都划归compile依赖的范畴。也就是说,他们应该在编译时可用(如果你在构建一个WAR文件,包含/WEB-INF/libs目录)。此外,<scope>元素的值也可以设置为以下两种:

  • provided  -  编译工程代码必须的依赖,但是在执行时执行代码的容器将会提供(如,Java Servlet API)
  • test  -  用于编译和执行测试的依赖,但构建和执行工程的执行时代码时不需要。

现在,执行mvn compile或者mvn package,Maven将会从Maven中心仓库中解析Joda Time依赖,并成功构建工程。

下面是完整的pom.xml文件。

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  4.     <modelVersion>4.0.0</modelVersion>  
  5.     <groupId>org.springframework</groupId>  
  6.     <artifactId>gs-maven</artifactId>  
  7.     <packaging>jar</packaging>  
  8.     <version>0.1.0</version>  
  9.   
  10.     <dependencies>  
  11.         <dependency>  
  12.             <groupId>joda-time</groupId>  
  13.             <artifactId>joda-time</artifactId>  
  14.             <version>2.2</version>  
  15.         </dependency>  
  16.     </dependencies>  
  17.   
  18.     <build>  
  19.         <plugins>  
  20.             <plugin>  
  21.                 <groupId>org.apache.maven.plugins</groupId>  
  22.                 <artifactId>maven-shade-plugin</artifactId>  
  23.                 <version>2.1</version>  
  24.                 <executions>  
  25.                     <execution>  
  26.                         <phase>package</phase>  
  27.                         <goals>  
  28.                             <goal>shade</goal>  
  29.                         </goals>  
  30.                         <configuration>  
  31.                             <transformers>  
  32.                                 <transformer  
  33.                                     implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">  
  34.                                     <mainClass>hello.HelloWorld</mainClass>  
  35.                                 </transformer>  
  36.                             </transformers>  
  37.                         </configuration>  
  38.                     </execution>  
  39.                 </executions>  
  40.             </plugin>  
  41.         </plugins>  
  42.     </build>  
  43. </project>  

注意:上述完整的pom.xml文件采用Maven Shade Plugin构建jar文件

Summary

你已经创建了一个简单的基于Maven构建的Java工程。


原文链接:http://spring.io/guides/gs/maven/


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 脑子不好使怎么办搞笑 脑子不好使了怎么办 最近脑子不好使怎么办 感觉自己好笨没脑子怎么办 脑子浑浊不清晰怎么办 30岁体力下降怎么办 皮肤差毛孔粗大怎么办 最近身体素质越来越差怎么办 身体素质差容易感冒怎么办 易疲惫犯困体质怎么办 成年狗体力不行怎么办 累了体力不支怎么办 新兵连成绩不合格怎么办 征兵体检血压高怎么办 魔域手游幻兽亲密度过低怎么办 移动账号被锁定怎么办 魔域手游账号被冻结怎么办 魔域手游没用的装备怎么办 5173账号三年找回怎么办 电脑的任务栏不见了怎么办 减肥出现瓶颈期怎么办 减肥到瓶颈期怎么办 减脂皮肤松弛怎么办 减肥期间上火了怎么办 涂了瘦身霜好辣怎么办 站起来就头晕怎么办 蹲了起来头晕怎么办 蛙跳后大腿疼怎么办 头低久了脖子痛怎么办 边防武警改革义务兵怎么办 家门钥匙丢了怎么办 森警改革士官怎么办 武警改制后士兵怎么办 消防改革时新兵怎么办 腈纶衣服染色了怎么办 部队新兵体能训练不及格怎么办 做足疗私处有了反应怎么办 跑步跑不起来怎么办 28岁有抬头纹怎么办? 眼睛近视加散光怎么办 眼睛近视又散光怎么办