文档章节

Spring Integration之旅1——用Maven构建项目

自由的角马
 自由的角马
发布于 2015/01/10 13:58
字数 2772
阅读 273
收藏 0
前奏:
公司用Spring Integration开发项目,之前连Spring都没用过,java的web项目也没怎么写过。无奈,只好一点一点地从入门形如学。
Spring Integration的官网网址,你可以从这开始学: http://projects.spring.io/spring-integration/

Spring Integration项目可以通过maven或gradle进行构建,下面从“用Maven构建项目”开始讲起。译自原文: http://spring.io/guides/gs/maven/      
本人能力和水平有限,如果译的不好,请大家指正。】

开端

从这开始

Maven构建项目(Building Java Projects with Maven)

本手册带领你用maven构建java项目

你将构建

你可以构建并编译事先提供给你的java项目。

你需要准备:

  • 15分钟
  • 你喜欢的文本编辑器或集成开发工具(IDE)

  • JDK 6 或更新版本的JDK

如何使用本手册

和其它Spring的入门指南(Getting Started guides)一样,你可以浏览并完成每一个步骤,或者跳过你熟悉的基本安装步骤, 无论哪种方式,你都可以完成你的编码并结束本教程的学习。

从头开始,跳转到“建立项目”(Set up the project).

跳过基础知识, 完成以下步骤:

如果你完成此步骤, 你可以在gs-maven/complete.代码中检查你的结果

建立项目(Set up the project)

首先,你需要创建一个java项目以便通过maven的来进行编译. 为了把重点放到maven, 现在我们使创建的项目尽可能简单。

创建一个目录结构

在你创建的项目根目录文件夹下,创建以下结构的子目录; 如, 在linux系统可用以下指令创建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进行构建的java项目, 下一个步骤就是安装Maven。

从这 http://maven.apache.org/download.cgi. 下载Maven,只需要下载二进制文件, 所以只需要找到 apache-maven-{version}-bin.zip(windows系统下)的链接或apache-maven-{version}-bin.tar.gz(Linux系统下)

下载后将其解压到你电脑的某个目录下. 然后将bin目录添加到环境变量的 path路径下。

这不用多说了吧,和配制JDK是类似的。实在不懂,请参考官方文档:

Windows 2000/XP

  1. Unzip the distribution archive, i.e. apache-maven-3.1.1-bin.zip to the directory you wish to install Maven 3.1.1. These instructions assume you chose C:\Program Files\Apache Software Foundation. The subdirectory apache-maven-3.1.1 will be created from the archive.
  2. Add the M2_HOME environment variable by opening up the system properties (WinKey + Pause), selecting the "Advanced" tab, and the "Environment Variables" button, then adding the M2_HOME variable in the user variables with the value C:\Program Files\Apache Software Foundation\apache-maven-3.1.1. Be sure to omit any quotation marks around the path even if it contains spaces. Note: For Maven   2.0.9, also be sure that the M2_HOME doesn't have a '\' as last character.
  3. In the same dialog, add the M2 environment variable in the user variables with the value %M2_HOME%\bin.
  4. Optional: In the same dialog, add the MAVEN_OPTS environment variable in the user variables to specify JVM properties, e.g. the value -Xms256m -Xmx512m. This environment variable can be used to supply extra options to Maven.
  5. In the same dialog, update/create the Path environment variable in the user variables and prepend the value %M2% to add Maven available in the command line.
  6. In the same dialog, make sure that JAVA_HOME exists in your user variables or in the system variables and it is set to the location of your JDK, e.g. C:\Program Files\Java\jdk1.5.0_02 and that %JAVA_HOME%\bin is in your Path environment variable.
  7. Open a new command prompt (Winkey + R then type cmd) and run mvn --version to verify that it is correctly installed.

为检测maven是否安装成功,可在命令行下执行以下mvn 命令。

mvn -v
如果安装成功,将显示一些maven的安装信息,.类似于这样的信息:
IOS系统下:

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"
windows系统下:

Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 23:22:2
2+0800)
Maven home: D:\professSoftware\apache-maven-3.1.1
Java version: 1.6.0_43, vendor: Sun Microsystems Inc.
Java home: D:\professSoftware\JDKx64\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
E:\IntellijIDEAWorkspace\MavenTestProject>
恭喜!你的maven成功安装了。

定义一个简单的Maven构建(Define a simple Maven build)


现在Maven已经安装成功, 你需要创建一个Maven项目的定义文件. Maven项目是通过一个叫pom.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.gs</groupId> <artifactId>gs-maven-initial</artifactId> <version>0.1.0</version> <packaging>jar</packaging></project>

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

  • <modelVersion>. POM 模版的重酬(总是 4.0.0).

  • <groupId>. 项目所属的组或组织名称. 通常是逆序的公司域名。

  • <artifactId>. 用于其它项目依赖的包名(如, JAR 或 WAR 文件的名称).

  • <version>. 项目要构建的版本号

  • <packaging> - 项目将要被打包的类型.默认是 "jar"用于打包成JAR文件. 使用"war" 用于打成WAR包

   When it comes to choosing a versioning scheme, Spring recommends the [semantic versioning](http://semver.org) approach.

到目前为止,你的最小的、可以执行的Maven项目已经定义完成。

构建java源代码(Build Java code)


Maven已经准备好构建项目了. 你可以用Maven执行maven构建周期的以下几个构建目标, 包括编译项目代码, 打包 (如 JAR 文件), 将打好的项目包(jar包或war)安装到本地依赖库。.

通过以下命令编译项目源代码:

mvn compile
这将会运行maven,告诉它构建目标。当构建完成时,你应该能在  target/classes文件夹下看到.class文件。
说明:我自己试验时老是过不去,提示说什么网络异常,下载失败,搞了半天,各种方法都试了,后来才发现,是公司网络了,公司是通过代理链接网络的,不知道做了什么限制,回家后用自己的电脑试,一下就过去了,动行的完好无损。如果你也是这种情况的话,就不要老在这纠结了,换个网络试试吧
说明2:执行mvn compile时,如果你是第一次构建maven项目,它会自己去下载要依赖的相关插件(也就是资源仓库),默认是下载到Users\[Administrator]\.m2\repository(你没有更改settings.xml文件).如果下载失败,则无法构建。

你可能不想或不可能直接去使用.class文件,而是希望运行pgcage目标进行打包。

mvn package

package构建目标将会编译你的源代码,执行所有的测试,将源代码打包成 JAR 文件到target 目录下。JAR 文件的名称将依赖于<artifactId> 和<version>。如,之前给定的最简单的pom.xml 文件,JAR 文件将会命名成 gs-maven-initial-0.1.0.jar.

   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 也维护着一个本地依赖关系库 (通常在你home 目录下 a .m2/repository目录) 以便快速地访问项目的依赖关系. 如果你想将打包好的项目jar文件安装到本地依赖库中,你应该调用 install 构建目标:

mvn install

install 构建目标编译、测试、打包你的项目源代码并且将它复制到本地依赖库,为其它的项目引用它作为依赖。

说到依赖关系, 现在到了在Maven构建中声明依赖关系的时候了.

声明依赖关系(Declare Dependencies)

简单的Hello World程序完全是独立的,没有依赖任何其它类库。然而,大部分的应用程序,需要依赖其它的类库以处理共同的和复杂的问题。

例如, 假设有saying "Hello World!"的别处一种实现方式,你需要应用程序打印当前日期和时间,虽然你可以用本地的java类库(jdk)来实现日期和时间的显示,但为了让程序变得更有趣,你可能想通过调用 Joda Time libraries来实现

首先,更改你的 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>标签内,这依赖有三个子元素构成。

  • <groupId> -项目所属的组或组织名称. 

  • <artifactId> - 要引用的库(包)名称

  • <version> - 要引用的库(包)的指定版本号

到目前为止,所有的依赖都限定在编译依赖范围内,也就是说,它们在编译时是有效的 (如果你构建的是 WAR 文件,包含了WAR中的 /WEB-INF/libs 文件夹下的文件)。 另外,你可能要用 <scope>元素来指定以下的范围之一。

  • provided - 编译项目代码时要求的依赖,但需在运行时被容器提供以运行源代码(e.g., the Java Servlet API)。

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

现在如果你运行 mvn compile 或mvn package,Maven 应当会决定并从Maven的中心库下载 the 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> <dependencies> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.2</version> </dependency> </dependencies> <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>

概要(Summary)

恭喜!你已经创建了一个简单但有效的用Maven构建的Java项目。


本文转载自:http://blog.csdn.net/luoweifu/article/details/17057649

自由的角马
粉丝 1
博文 269
码字总数 0
作品 0
文山
私信 提问
为 JAX-RS web 服务开发 Spring Android 客户端

具象状态传输 (Representational State Transfer,REST)软件体系结构基于资源表示的传输。RESTful web 服务是一种基于 REST 和 HTTP 协议的 web 服务,并被作为一个 URI 路径可用。此 web ...

IBMdW
2011/09/28
3.1K
1
5分钟构建spring web mvc REST风格HelloWorld

当然写本文的目的不是为了速度,只是表明现在构建一个Spring web mvc Rest风格的HelloWorld应用会很简单。不过如果看过Spring Boot这个项目,可能只需要最多3分钟就能构建一个简单的Rest风格...

黄金小猪2号
2014/01/07
4.3K
2
SpringBoot多模块项目实践(Multi-Module)

序言: 比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止POM变得过于庞大,方便某个模块的构建,而不用每次都构建整个项目,并且使得针对某个模块的特...

覃光林
07/03
137
0
第二章——Spring Boot启动器与依赖管理

强烈推荐选择支持依赖管理和可以发布到“Maven中央”仓库的构建系统。推荐使用Maven或Gradle。Spring Boot可以使用其他构建系统(例如,Ant),但支持得并不是很好。 1 依赖管理 Spring Boo...

Leech
2018/02/04
0
0
Spring IO Platform Brussels SR10 和 Cairo SR1 发布

Spring IO Platform Brussels-SR10 和 Spring IO Platform Cairo-SR1 均已发布,可从 repo.spring.io 和 Maven Central 获取更新。 两者都对许多项目进行了升级,其中有 Spring IO Platform...

局长
2018/05/11
915
0

没有更多内容

加载失败,请刷新页面

加载更多

【jQuery基础学习】05 jQuery与Ajax以及序列化

本文转载于:专业的前端网站➭【jQuery基础学习】05 jQuery与Ajax以及序列化 好吧,这章不像上章那么水了,总是炒剩饭也不好。 关于AJAX 所谓Ajax,全名Asynchronous JavaScript and XML。(也...

前端老手
30分钟前
10
0
CVE-2019-14287(Linux sudo 漏洞)分析

作者:lu4nx@知道创宇404积极防御实验室 作者博客:《CVE-2019-14287(Linux sudo 漏洞)分析》 原文链接:https://paper.seebug.org/1057/ 近日 sudo 被爆光一个漏洞,非授权的特权用户可以...

极客君
31分钟前
7
0
关于分布式,你需要知道的真相

目录 一、分布式锁 数据库的唯一索引 Redis 的 SETNX 指令 Redis 的 RedLock 算法 Zookeeper 的有序节点 二、分布式事务 2PC 本地消息表 三、CAP 一致性 可用性 分区容忍性 权衡 四、BASE 基...

李红欧巴
31分钟前
8
0
读书笔记:深入理解ES6 (附录B)

附录B:了解ES7(2016)   ES6经历了4年的发展,之后TC-39决定将发布周期转换为每年一版,以确保新语言特性能够更快地发展。   ES6中添加了三个语法特性,下面一一来讲。 第1节 指数运算...

张森ZS
37分钟前
14
0
计算机公开课推荐 2019.8

欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 面试求职交流群 724187166 ApacheCN 学习资源 编程 哈佛 CS50:计算机科学导论 视频 MIT 6.00.1x:计算机科...

ApacheCN_飞龙
38分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部