Spring Roo 简介,第1 部分: 从源代码构建
简介: Spring Roo 是针对Java™技术的一个轻量级生产力工具,可快速便捷地开发基于Spring 的应用程序。使用Spring Roo 创建的应用程序遵循Spring 最佳实践,且基于JPA、Bean Validation (JSR-303) 和Dependency Injection (JSR-330) 等标准。Roo 提供一个使用方便、上下文感知、由标签完成的shell 构建应用程序。Spring Roo 可扩展且支持附件,进一步增强了其功能。本文介绍Spring Roo 并提供在Windows®和*nix 系统上编译Spring Roo 源代码的分布指导。
查看本系列更多内容
标记本文!
发布日期: 2011 年  3 月28 日
级别:初级
原创语言:英文
简介
Spring 框架于2002 年年底发布,目的在于简化J2EE(目前是JavaEE)开发。在过去8 年中,Spring 成功完成了该使命,提供了Java 社区框架或功能,比如Spring Security、Spring MVC、事务管理、Spring 批处理和Spring 集成,这都易于理解和使用。Spring 希望让Java 开发人员的工作更轻松、更富成效。为此,Spring 创建了一个名为Spring Roo 的开发工具。
Spring Roo(参见参考资料)是针对Java 技术的一个可扩展的、基于文本的开源RAD 工具。它是用于创建和管理基于Spring 的应用程序的一个强大资源。这里是任务说明:
Roo 的任务是从根本上可持续地改善Java 开发人员的生产效率,而无损工程完整性和灵活性。
这一要求转换为构建于Java 技术之上的一种工具,可持续地增加项目整个生命周期的生产效率,且不限定开发人员使用某一特定方法。Spring Roo 使用流行、可靠和成熟的库,比如Spring 框架、Java 持久化API、Java Server Pages (JSP)、Spring Security、Spring Web Flow、Log4J 和Maven。Roo 生成的应用程序使用Bean Validation (JSR-303) 和Dependency Injection (JSR-330) 这样的标准,且遵循最佳实践SpringSource 认证的应用程序架构。
使用Spring Roo,您可以添加和配置JPA、Spring MVC、Spring Security 等功能,使用Log4j 进行日志记录,测试JUnit 和Selenium、Solr、JMS、等框架,仅需在Roo shell 上输入命令即可。使用Roo 添加这些功能节省的时间提高了开发人员的生产效率。Roo 不能编写业务逻辑,但可以管理
应用程序的基础结构或配置。
Roo 是一个开发时间工具,这意味着应用程序在运行时独立于Roo。由于Roo 在运行时不存在,它没有任何性能或内存开销。这确保您不依赖于Spring Roo,您只需几个按键即可随时从您的项目中删除Roo。
本文讨论如何使用Roo shell 构建简单的web 应用程序,并展示如何在Windows 或Ubuntu 机器上编译Spring Roo 源代码。
回页首
开始使用Roo shell
通过加载Roo shell 并使用命令与之交互,您可以管理和配置应用程序。Roo Shell 是一个制表完成的、上下文感知的、提供提示的命令shell。您可以使用hint 命令询问Spring Roo 您的下一步逻辑操作。Roo 足够智能,可通过判定应用程序上下文建议下一步行动。例如,比方说您使用entity命令创建了一个实体。然后输入hint命令。Roo 会告诉您应当使用field将字段添加到您的实体。该特性减少了Roo 的概念权重,使其成为一个优秀的学习工具。您可以跟随Roo help和hint命令创建完全的应用程序,无需参考文档。
先决条件
在开始使用Roo 之前,确保您安装了:
1.Java V6 JDK
2.Apache Maven V2.0.9 或更高
安装Spring Roo
要安装独立的Spring Roo:
1.您可以下载Roo 独立命令行shell 或使用内置的Roo SpringSource Tool Suite (STS) 插件。我建议两者都下
载并一起使用,因为STS 为基于Spring 的应用程序通过Eclipse 提供许多额外功能。
a.Spring Roo
b.SpringSource Tool Suite
2.解压Spring Roo 到选定位置。
3.设置环境变量:
a.在一台Windows 机器上,添加%ROO_HOME% /bin 到这样的路径:其中ROO_HOME是解压的
Roo 文件的路径。
b.在一台*nix 机器上,创建到$ROO_HOME/bin/roo.sh 的一个符号链接
(例如,sudo ln -s ~//bin/roo.sh /usr/bin/roo)
构建应用程序
为向您展示Roo 的强大功能,让我们创建一个简单的企业会议应用程序。一个会议应用程序有两个实体:Speaker 和Talk。一个Speaker 可以提供一次或多次讲话,且Talk 将仅由一个发言人提供。简单的类图如图1 所示。
图  1. 类图Speaker Talk
创建应用程序:
1.打开操作系统命令行shell。
2.使用mkdir命令创建一个名为conference的目录。
3.转到您的shell 中的conference目录。
4.输入roo。该命令将启动Roo shell,如清单1 所示。
清单  1. 启动Roo shell
C:\Users\xebia\demo\conference>roo
____  ____  ____
/ __ \/ __ \/ __ \
/ /_/ / / / / / / /
/ _, _/ /_/ / /_/ /
/_/ |_|\____/\____/      1.1.B.RELEASE [rev 793f2b0]
Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.
roo>
既然我们在Roo shell 内部,我们将使用Roo 的hint命令来引导接下来的步骤。hint建议使用project创建一个新的基于Maven 的Spring 项目(参见清单2)。
清单  2. 使用Roo shell 中的hint
Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.
roo> hint
Welcome to Roo! We hope you enjoy your stay!
Before you can use many features of Roo, you need to start a new project.
To do this, type ’project’ (without the quotes) and then hit TAB.
Enter a --topLevelPackage like ’pany.projectname’ (no quotes).
When you're finished completing your --topLevelPackage, press ENTER.
Your new project will then be created in the current working directory.
Note that Roo frequently allows the use of TAB, so press TAB regularly.
Once your project is created, type ’hint’ and ENTER for the next suggestion.
You're also welcome to visit `for Roo help.
roo>
正如hint命令所建议的,我们将使用project命令创建一个项目。该命令有一个必要属性topLevelPackage,用于指定根程序包的名称。除了必要属性之外,我们将使用两个可选属性:java(指定Java 版本)和projectName(指定项目名称)。输入以下内容:
project --topLevelPackage nference --java 6 --projectName conference
该命令将创建一个Maven V2 管理的基于Spring 的项目,如以下输出所示:
Created C:\Users\xebia\demo\l
Created SRC_MAIN_JAVA
Created SRC_MAIN_RESOURCES
Created SRC_TEST_JAVA
Created SRC_TEST_RESOURCES
Created SRC_MAIN_WEBAPP
Created SRC_MAIN_RESOURCES\META-INF\spring
Created SRC_MAIN_RESOURCES\META-INF\l
Created SRC_MAIN_RESOURCES\log4j.properties
再次输入hint向Roo 询问下一步行动。这次它建议建立持久化机制。在shell 上输入persistence setup并按下Tab三次。您会获得--provider选项。按下H然后按下Tab完成“HIBERNATE”。在提供者之后,按下tab选择数据库,您会看到有大量选项。因为我们使用Hibernate 作为我们的提供者,我们不能选择非关系型数据库,比如Google App Engine。现在,我打算使用HYPERSONIC_IN_MEMORY 数据库。
persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
还有其他可选属性,比如用户名和密码,这次我们不需要这些。
现在我们已经建立了持久化机制,我们将再次使用hint命令。这次我们被告知要使用entity命令创建实体。Entity用于创建实际域对象,且有一个必要属性class,用于指定实体的名称。除了必需的--class属性,我们还将使用--testAutomatically属性,该属性为域对象创建集成测试。让我们创建两个实体:Speaker 和Talk。
entity --class ~.domain.Speaker –testAutomatically
entity --class ~.domain.Talk --testAutomatically
我使用了~作为项目顶级程序包的占位符。
Entity将创建一个灵活的、特性丰富的JPA 实体。所创建的实体将有JPA @Entity,带有ID、版本、EntityManager 和无参数的构造函数。所生成的实体将拥有persist、merge、remove、flush、count、find 和findById 等方法。如果看一下该命令的输出,您会注意到该命令除了创建Java 文件(为Speaker 和Talk),还创建了以*Roo_*.aj 结尾的AspectJ 文件。这些*Roo_*.aj 称为Intertype Declaration (ITD)、Mixins 或Introductions。Roo 将ITD 作为一个代码生成的工件。ITDs 允许Roo 在一个单独的编译单元中生成代码,但ITDs 在编译时被合并成同一个编译类。AspectJ intertype 声明用于自动生成ID 和版本字段,以及域类中持久化字段的getters 和setters。
再次使用hint提供建议,根据建议使用field命令将字段添加到实体。让我们给Speaker 实体添加一些字段:field string --fieldName firstname --class ~.domain.Speaker --notNull
field string --fieldName lastname --notNull
field string --fieldName email --unique --notNull
field string --fieldName organization
field date --fieldName birthdate --type java.util.Date --past --notNull
field number --type java.lang.Long --fieldName age --min 25 --max 60
--class选项允许我们指定向哪个类添加字段。
field命令可用于指定特定于JavaBean 验证的注释,含有--max和--min等选项。它还可用于指定特定于JPA 的注释,含有--fetch、--column和--unique等选项。对于日期字段,您还可以指定日期应当是过去还是将来,正如上面使用的。使用field,您无需记住这些注释。
现在让我们向Talk 实体添加一些字段:
field string --fieldName title --class ~.domain.Talk --notNull
field string --fieldName description --notNull --sizeMax 4000
目前为止,我们创建了实体并向其添加了字段,但是我们没有指定它们之间的关系。Speaker 与Talk 之间的关系是ONE_TO_MANY(例如,一个发言人可发表多次讲话)。这通过field完成,如下所示:field set --fieldName talks --element ~.domain.Talk --class \
~.domain.Speaker --cardinality ONE_TO_MANY
field reference --fieldName speaker --type ~.domain.Speaker \
--class ~.domain.Talk –notNull
现在我们想为会议应用程序scaffold(搭建)一个web 层,可通过controller命令完成。生成控制器和所有相关web 工件最方便的方式是使用controller all。
controller all --package ~.web
第一次使用控制器命令还会添加额外的依赖项到您的项目中,比如Spring MVC 和Tiles。这可能需要
一些时间来运行,因为它需要下载所有依赖项(如果它们不存在于您的Maven 存储库中)。该命令还展示Roo 的功能之一:只有在需要依赖项时才予以添加。
下一步,我们将使用logging 命令建立log4j。
logging setup --level INFO --package ALL_SPRING
退出Roo shell 之前应做的最后一件事是,当我们使用entity命令指定了--testAutomatically时,运行生成的集成测试。要从shell 中运行测试,输入perform tests。
Roo 将调用委托给Maven 来运行测试,因此perform tests等同于mvn test命令。输入q或quit退出shell。
这些命令将创建一个功能齐全的会议应用程序。接下来我们将运行这个应用程序。
要运行该应用程序,输入mvn tomcat:run,这将启动jetty 服务器。打开web 浏览器并转至
localhost:8080/conference/。您会看到图2 中的屏幕。
图  2. 会议应用程序主页
您可以单击Create new Speaker创建一个会议发言人。您还可以单击List all Speakers来查看、编辑和删除用户。以同样的方式,您可以创建一个Talk,但是必须在创建Speaker 之后。
这是一个简单的应用程序,但是它展示如何在数分钟内从头轻松创建一个新的基于Spring 的web 应用程序。在本系列的第  2 部分,我将向您展示如何使用不同的Roo 功能和附加组件构建应用程序。
现在我们已经创建了一个简单的应用程序,我将向您展示如何在Windows 和Ubuntu 上编译Spring Roo 源代码。
回页首
从源代码构建Spring Roo
Spring Roo V1.1.0 是最新发布版本,目前正在积极开发V1.1.1 版本。您可能需要从源代码构建Spring Roo 的原因如下:
1.Spring Roo 不提供夜间构建,因此如果您希望使用Spring Roo 的最新功能,就需要编译Spring Roo 的源代
码。
2.您希望为Spring Roo 项目做任何类型的开发。
3.您希望为Spring Roo 编写附加组件。
4.您只希望把玩一下Spring Roo 代码,看看它是如何实现或编写的。
结果
在本部分结尾,您将能够在Windows 和*nix 系统上成功运行最新Spring Roo 源代码的Maven 版本。您将能够使用最新的Spring Roo 并将Spring Roo 项目导入Eclipse 或STS (SpringSource Tool Suite)。
spring系列框架有哪些
在Ubuntu 上编译Spring Roo 源代码的过程
在Ubuntu(和其他*nix 系统)上编译源代码很容易。只需遵循以下步骤:
1.安装Git,一个分布式源代码控制管理系统。要在Ubuntu 系统上安装它,输入sudo apt-get install
git-core gitk。
2.输入git clone git:///roo/roo.git,使用Git 签出Spring Roo。您将在主目录中
看到一个roo 文件夹,其中包含所有Roo 源代码。
3.GnuPG 支持数据和通信的加密和签名,且以一个多功能的密钥管理系统和各种公钥目录的访问模块为特
。Roo 使用GPG 来自动签名编译输出。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。