【spring】Building Java Projects with Maven

来源:互联网 发布:精仿rmb货到付款淘宝 编辑:程序博客网 时间:2024/05/21 19:31

用Maven建立Java工程


    本指南将引导你通过使用Maven来建立一个简单的Java工程。


1、你将建立的工程是什么-What you'll build


    你将先创建一个提供当天时间的应用程序,然后使用Maven来构建它。

2、你将需要什么-What you'll need

  • 大约15分钟
  • 一个最爱的文本编辑器或者IDE
  • JDK6以上

3、如何完成这个指南-How to complete this guide


    就像Spring入门指南一样,你可以从头开始并完成每一步,或者你可以绕过那些对你来说已经熟悉的

创建步骤。无论是那种方式,你都完成了工作代码。

    从头开始的,转到“4、建立工程”。

    绕过基本配置的,按照下面的步骤操作:

  • 下载并解压缩本指南的源码,或者使用Git命令来复制:
   git clone https://github.com/spring-guides/gs-maven.git
  • 使用cd命令进入目录gs-maven/initial
  • 跳到[initial]的头部
    当你完成了这些时,你可以对照gs-maven/complete中的代码检查你的结果。

4、建立工程-Set up the project


    首先,你需要为Maven建立一个Java工程来做构建。为保持对Maven的专注,我们现在尽可能让工程

越简单越好。

创建目录结构

    在你选择的工程目录下,创建如下的子目录结构;例如,

    在*nix系统下使用mkdir -p src/main/java/hello

   (另加:在windows下可以用:mkdir src\main\java\hello

└── src    └── main        └── java            └── hello

    在src/main/java/hello目录下,你可以创建任何你想要的类。为了与本指南的其余部分保持一致,

下面需要创建这两个类:HelloWorld.javaGreeter.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。

Maven在链接:http://maven.apache.org/download.cgi 作为一个zip文件可以下载的。只有其中的二进制

文件是需要的,因此查找到apache-maven-{version}-bin.zip或者apache-maven-{version}-bin.tar.gz

的链接。

    一旦你已经下载那个zip文件,解压缩到你的电脑上。然后把bin文件夹的路径加入到你的计算机

的path中。

    下面测试一下Maven的安装是否成功,在控制台命令行运行mvn命令:

(注意,新修改系统变量path后,需要新建一个控制台窗口才会生效,之前打开的控制台窗口不会生效。)

Microsoft Windows XP [版本 5.1.2600](C) 版权所有 1985-2001 Microsoft Corp.C:\Documents and Settings\sine>mvn -vError: JAVA_HOME not found in your environment.Please set the JAVA_HOME variable in your environment to match thelocation of your Java installation.C:\Documents and Settings\sine>

    上述提示表示系统变量中没有设置JAVA_HOME变量。在系统变量中添加JAVA_HOME即可,其值为jdk的

安装路径:如,C:\Program Files\Java\jdk1.7.0_60

重新打开一个控制台命令行,运行mvn -v 或者 mvn -version,显示如下:

C:\Documents and Settings\sine>mvn -vApache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-12T04:58:10+08:00)Maven home: D:\Java\Spring\apache-maven\apache-maven-3.2.3\bin\..Java version: 1.7.0_60, vendor: Oracle CorporationJava home: C:\Program Files\Java\jdk1.7.0_60\jreDefault locale: zh_CN, platform encoding: GBKOS name: "windows xp", version: "5.1", arch: "x86", family: "windows"

    

    现在,恭喜您已经成功安装Maven了。更多Maven配置说明请参考:Apache Maven安装说明


5、定义一个简单的Maven构建器-Define a simple Maven build


    在Maven被成功安装后,你需要创建一个Maven工程定义。Maven是被命名为pom.xml的XML文件来定义的。

除了别的之外,这个XML文件中给出了工程的名称,版本,以及它对外部库文件的依赖关系。

在工程的根目录下创建一个XML文件,名称为: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工程所必要xml配置,这个对pom.xml文件来说是

最简单的可能。它包含以下工程配置方面的信息:

  • <modelVersion> - POM模型版本(总是4.0.0)
  • <groupId> - 项目属于的团体或者组织。通常表示为一个倒置的域名。
  • <artifactId> - 给本工程的库文件的名字(例如,它的JAR或者WAR文件的名字)
  • <version> - 当前构建的工程的版本。
  • <packaging> - 这个工程应该怎么被打包。默认情况下,"jar"表示打包成JAR文件,用"war"表示
     打包成WAR文件。
Note: When it comes to choosing a versioning scheme, Spring recommends the 
[semantic versioning](http://semver.org) approach.

    在这里,你拥有了一个最小的,有Maven能力的工程定义。


6、构建Java代码-Build Java code


    Maven已经准备好要去构建工程了。你可以用Maven执行几个构建生命周期的目标了,包括这些目标:

编译工程的代码,创建库文件打包(比如,一个JAR文件),以及安装这个库文件到本地的Maven依赖库中。

为了尝试构建工程,命令行执行下面的命令:(命令执行的目录是工程的根目录下)

mvn compile

    这样将会运行Maven,告诉它执行编译。当编译完成后,你将会在target/classes目录下发现编译

生成的.class文件。

    你未必想直接用.class文件发布或者工作,这个时候,你很可能想运行package:

mvn package

    package命令运行后,会编译你的Java代码,跑所有的测试,最后以打包代码到一个JAR文件到

target目录中来结束。这里JAR文件的名字是基于工程的<artifactId>和<version>。

例如,前面给出的最小的pom.xml,它生成JAR文件将被命名为gs-maven-0.1.0.jar。


Note:If you’ve changed the value of <packaging> from "jar" to "war", the result 

will be a WAR file within the target directory instead of a JAR file.


    为了快速对项目依赖的访问,Maven在你的本地机器上还维护一个依赖库(usually in 

a .m2/repository directory in your home directory)。

    如果你想要安装你项目的JAR文件到本地库中,你需要调用install命令:

mvn install

    这里执行install命令后,将会编译,测试以及打包你的项目代码,之后再拷贝它到本地的依赖库中,

为另外的项目对它的依赖做准备。

既然这里谈到了依赖性,现在是时候介绍在Maven构建中如何声明依赖性。


7、声明依赖性-Declare Dependencies


    简单的HelloWorld样例是完全的自包含,并且没有依赖任何额外的库文件。然而,大多数应用程序

是依赖外部的库文件来处理普通或者复杂的功能的。

    例如,假设除了打印”Hello World!“外,你还想要应用程序打印当前的日期和时间。当然,

这里你可以用本地Java库文件自带的日期时间类,不过你可以让事情更有趣,我们这里使用

Joda Time库文件。

    首先,按照以下方式修改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 Time的LocalTime类来获取和打印当前时间。

    如果你此时就用mvn compile来构建工程的话,那么将会失败。失败的原因的是,没有在构建文件

中声明Joda Time作为编译依赖。你可以把下面的几行加入到pom.xml(在<project>元素内部):

<dependencies>        <dependency>            <groupId>joda-time</groupId>            <artifactId>joda-time</artifactId>            <version>2.2</version>        </dependency>    </dependencies>

    这个XML模块声明工程需要的依赖库列表。特别地,这里仅仅为Joda Time库声明了一个依赖性。

在<dependency>元素里面,这个依赖坐标是通过3个子元素来定义的:

  • <groupId> - The group or organization that the dependency belongs to.
  • <artifactId> - The library that is required.
  • <version> - The specific version of the library that is required.

    默认情况下,所有的依赖会被作为编译依赖来审视。也就是说,它们在编译时间应该是可用的(而且
如果你正在构建一个WAR文件,包含在/WEB-INF/libs文件下的WAR)。此外,你可能会指定一个<scope>元素
来指定下面范围中的一个:
  • provided - Dependencies that are required for compiling the project code, but that will be provided at runtime by a container running the code (e.g., the Java Servlet API).
  • test - Dependencies that are used for compiling and running tests, but not required 
            for building or running the project’s runtime code.

    现在如果你运行mvn compile或者mvn package,Maven应该会解决从Maven中央库的Joda Time依赖,
而且此时构建会成功。

    这里提供完整的pom.xml文件如下:

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[] -->    <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>

    注意:The completed pom.xml file is using the Maven Shade Plugin for the simple 

convenience of making the JAR file executable. The focus of this guide is getting 

started with Maven, not using this particular plugin.


8、总结-Summary


    恭喜你!你已经为Java工程创建了一个简单而有效的Maven工程定义。


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

0 0
原创粉丝点击