Spring框架于2002年末发布,以简化J2EE(现为JavaEE)的开发。 在过去的八年中,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 Persistence API,Java Server Pages(JSP),Spring Security,Spring Web Flow,Log4J和Maven。 Roo生成的应用程序使用Bean验证(JSR-303)和依赖注入(JSR-330)之类的标准,并遵循SpringSource认证的最佳实践应用程序体系结构。
使用Spring Roo,您只需在Roo shell上键入命令,就可以添加和配置JPA,Spring MVC,Spring Security,使用Log4j进行日志记录,测试框架(如JUnit和Selenium,Solr,JMS,电子邮件)等功能。 使用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之前,请确保已安装以下组件:
安装Spring Roo
要安装独立的Spring Roo:
- 您可以下载Roo独立命令行外壳程序,也可以使用内置的Roo SpringSource工具套件(STS)插件。 我建议将两者下载并一起使用,因为STS为基于Spring的应用程序提供了超过Eclipse的许多附加功能。
- 将Spring Roo解压缩到您选择的位置。
- 设置环境变量:
- 在Windows计算机上,将%ROO_HOME%/ bin添加到路径,其中ROO_HOME是解压缩后的Roo文件的路径。
- 在* nix机器上,创建指向$ ROO_HOME / bin / roo.sh的符号链接
(例如
sudo ln -s ~/spring-roo-1.xx/bin/roo.sh /usr/bin/roo
)
建立应用程式
为了向您展示Roo的强大功能,让我们创建一个简单的企业会议应用程序。 会议应用程序具有两个实体:“发言人”和“谈话”。 一位发言人可以发表一个或多个演讲,而演讲只能由一位演讲者进行。 简单的类图如图1所示。
图1.类图演讲者讲话
![显示说话者元素(名字,姓氏等)的图与Talk元素(标题和描述)相关联](https://i-blog.csdnimg.cn/blog_migrate/3cf5885b127785ed3d4c09368cbcbc0a.png)
创建应用程序:
- 打开您的操作系统命令行外壳。
- 使用
mkdir
命令创建一个名为Conference的目录。 - 进入外壳中的会议目录。
- 输入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 project
(请参见清单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 ’com.mycompany.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 http://forum.springframework.org`for Roo help.
roo>
如hint
命令所建议,我们将使用project
命令创建一个项目。 此命令具有一个必需的属性topLevelPackage
,用于指定根软件包的名称。 除了必需的属性外,我们还将使用两个可选属性: java
(用于指定Java版本)和projectName
(用于指定项目的名称)。 输入以下内容:
project --topLevelPackage com.dw.roo.conference --java 6 --projectName conference
此命令将创建一个Maven V2管理的基于Spring的项目,如以下输出所示:
Created C:\Users\xebia\demo\conference\pom.xml
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\spring\applicationContext.xml
Created SRC_MAIN_RESOURCES\log4j.properties
再次键入hint
,要求Roo进行下一步操作。 这次它建议建立持久性机制。 在外壳上键入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文件(对于演讲者和谈话),还创建了以* Roo _ *。aj结尾的AspectJ文件。 这些* Roo _ *。aj称为“类型间声明(ITD)”,“ Mixins”或“简介”。 Roo使用ITD作为代码生成工件。 ITD允许Roo在单独的编译单元中生成代码,但是ITD在编译时被组合到同一个编译类中。 AspectJ类型间声明用于自动生成ID和版本字段,以及域类中持久性字段的获取器和设置器。
再次使用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
命令可用于指定带有--max
和--min
等选项的特定于JavaBean验证的注释。它还可用于指定带有--fetch
,-- --column
和--unique
等。对于日期字段,您还可以指定日期是过去的日期还是将来的日期,如上所用。 使用field
,您不必记住这些注释。
现在让我们向Talk实体添加一些字段:
field string --fieldName title --class ~.domain.Talk --notNull
field string --fieldName description --notNull --sizeMax 4000
到目前为止,我们已经创建了实体并向其中添加了字段,但是我们尚未指定它们之间的关系。 演讲者和对话之间的关系为ONE_TO_MANY(即,一位演讲者可以进行任意数量的对话)。 这是使用field
完成的,如下所示:
field set --fieldName talks --type ~.domain.Talk --class \
~.domain.Speaker --cardinality ONE_TO_MANY
field reference --fieldName speaker --type ~.domain.Speaker \
--class ~.domain.Talk –-notNull
现在,我们将要为会议应用搭建一个Web层。 这是使用controller
命令完成的。 生成控制器和所有相关Web工件的最便捷方法是使用controller all
。
controller all --package ~.web
首次使用controller命令还将为项目添加其他依赖项,例如Spring MVC和Tiles。 由于必须下载所有依赖项(如果您的Maven存储库中不存在这些依赖项),因此可能需要花费一些时间来运行。 此命令还显示了Roo的功能之一:仅在需要时才添加依赖项。
接下来,我们将使用logging命令设置log4j:
logging setup --level INFO --package ALL_SPRING
退出Roo shell之前,我们应该做的最后一件事是运行在我们使用entity
命令指定--testAutomatically
时生成的集成测试。 要从外壳中运行测试,请输入perform tests
。
Roo将调用委托给Maven来运行测试,因此perform tests
等同于mvn test
命令。 通过键入q退出shell或quit 。
这些命令将创建功能齐全的会议应用程序。 接下来,我们将运行此应用程序。
要运行该应用程序,请键入mvn tomcat:run
,它将启动码头服务器。 打开网络浏览器,然后转到http:// localhost:8080 / conference /。 您将看到图2所示的屏幕。
图2.会议应用程序主页
您可以单击“ 创建新的发言人”来创建会议发言人。 您还可以通过单击列出所有发言人来查看,编辑和删除用户。 同样,您可以创建一个对话,但不能在创建发言人之前。
这是一个简单的应用程序,但是它显示了您可以在几分钟内轻松地从头开始创建一个新的基于Spring的Web应用程序。 在本系列的第二部分中,我将向您展示如何使用不同的Roo功能和附加组件来构建应用程序。
现在,我们已经创建了一个简单的应用程序,我将展示如何在Windows和Ubuntu上构建Spring Roo源代码。
从源代码构建Spring Roo
Spring Roo V1.1.0是最新的生产发行版,在V1.1.1发行版下正在进行积极的开发。 出于某些原因,您可能需要从源代码构建Spring Roo:
- Spring Roo不提供每夜构建,因此,如果您想要Spring Roo的最新功能,则需要构建Spring Roo的源代码。
- 您想为Spring Roo项目做任何形式的开发。
- 您想为Spring Roo编写一个附加组件。
- 您只想尝试一下Spring Roo代码,看看它是如何实现或编写的。
结果
在本节结束之前,您将能够在Windows和* nix系统上成功运行最新的Spring Roo源代码的Maven构建。 您将能够使用最新的Spring Roo,并能够在Eclipse或STS(SpringSource Tool Suite)中导入Spring Roo项目。
在Ubuntu上构建Spring Roo源代码的过程
在Ubuntu(和其他* nix系统)上构建源代码很容易。 只需遵循以下步骤:
- 安装Git ,一个分布式源代码控制管理系统。 要将其安装在Ubuntu系统上,请输入
sudo apt-get install git-core gitk
。 - 通过键入
git clone git://git.springsource.org/roo/roo.git
使用Git签出Spring Roo。 您将在主目录中看到一个roo文件夹,其中包含所有Roo源代码。 - GnuPG允许对您的数据和通信进行加密和签名,并具有通用的密钥管理系统和用于各种公钥目录的访问模块。 Roo使用GPG自动签署构建输出。
-
gpg --list-secret-keys
命令gpg --list-secret-keys
。 输出应类似于清单3。清单3. gpg list命令的结果
C:\dev\roo-sourcecode\roo>gpg --1ist-secret-keys C:/Users/xebia/AppData/Roaming/gnupg\secring.gpg sec 2048R/2F96093B 2010-07-03 uid shekhar (spring-roo) <shekhargu1ati84@gmai1.com> ssb 2048R/B77E5C63 2010-07-03 C:\dev\roo-sourcecode\roo>_
- 如果看不到输出,则必须首先创建一个密钥。 使用
gpg –gen-key
,它将gpg –gen-key
您完成一系列创建密钥的步骤。 然后,验证使用gpg –list-secret-keys
生成了新创建gpg –list-secret-keys
。 - 接下来,您需要将密钥发布到公共密钥服务器。 记下
–list-secret-keys
显示的sec
密钥ID。 就我而言,它的密钥ID为2F96093B。 通过gpg –keyserver hkp://pgp.mit.edu –send-keys 2F96093B
将您的公共密钥推送到密钥服务器(在末尾更改密钥ID)。 - 某些Roo模块要求使用OSGi形式的JAR。 也就是说,他们没有可识别OSGi的清单。 Roo有一个特殊的项目,称为wrapping ,可以将普通的JAR转换为OSGi JAR。 在尝试与Roo配合使用之前,您需要运行包装器。 没有包装,您将看到错误,指出Maven无法找到
org.springframework.roo.wrapping.some_module
。 要创建包装的JAR,请在Roo检出根目录中键入:cd wrapping mvn clean install cd..
- 接下来,运行
mvn clean install
命令。 (应该在系统上安装Maven V2。如果没有,请立即安装。)每次构建源代码时,Maven都会提示您输入密钥的密码/口令(在创建GPG密钥时输入了口令)。 输入密码,然后按Enter 。 构建源代码将花费几分钟。
在Windows上构建Spring Roo源代码的过程
与Ubuntu相比,在Windows上构建源代码要困难一些。 跟着这些步骤:
- 安装Git ,一个分布式源代码控制管理系统。 要开始该过程,您需要在Windows计算机上安装Git。 我在Windows计算机上安装了msysGit 。 如果您已经安装了Git,则可以跳过此步骤。 安装msysGit时,它将询问安装位置。 它将打开命令提示符并开始触发许多命令。 这将持续一分钟左右。 安装之后,您将看到一个清单4所示的屏幕。
清单4.安装msysGit
{ test "$bindir/" = "$execdir/" || \ { rm -f "$execdir/git.exe" && \ test -z "" && \ ln "$bindir/git.exe" "$execdir/git.exe" 2>/dev/null || \ cp "$bindir/git.exe" "$execdir/git.exe"; } ; } && \ { for p in git-add.exe git-annotate.exe git-apply.exe git-archive.exe git-bisect--helper.exe git-blame.exe git-branch.exe git-bundle.exe git-cat-file.exe git-check-attr.exe git-check-ref rm -f "$execdirf$p" && \ ln "Sexecdir/git.exe" "Sexecdir/$p" 2>/dev/null ll \ ln -s "git.exe" "$execdir/$p" 2>/dev/null || \ cp "Sexecdir/git.exe" "$execdir/$p" Il exit; \ done; } && \ { test x"git-renote-https.exe git-renote-ftp.exe \ git-renote-ftps.exe" = x ll \ { for p in git-remote-https.exe git-remote-ftp.exe \ git-remote-ftps.exe; do \ rm -f "$execdir{$p" && \ ln "Sexecdir/git-remote-http.exe" "$execdir/$p" 2>/dev/null ll \ ln -s “git-renote—http.exe" "$execdir/$p" 2>/dev/null || \ cp "Sexecdir/git-remote-http.exe" "Sexecdir/$p" ll exit; \ done; } ; } && \ ./check_bindir "z$bindir" "z$execdir" "Sbindir/git—add.exe" ------------------------- Hello, dear Git developer. This is a minimal MSYS environment to work on Git. You are in the git working tree, and all is ready for you to hack. Welcome to msysGit Run 'git help git' to display the help index. Run 'git help <command>' to display help for specific commands. Run '/share/msysGit/add-shortcut.tcl' to add a shortcut to msysGit. It appears that you installed msysGit using the full installer. To set up the Git repositories, please run /share/msysGit/initialize.sh
- 设置Git环境变量。 必须在Windows路径中设置Git。 在Windows路径中添加$ {MSYSGIT} \ msysgit \ bin和{MSYSGIT} \ msysgit \ mingw \ bin,其中$ {MSYSGIT}是msysGit的安装位置。 打开一个新的命令提示符,然后输入
git
。 您将在图7中看到输出。清单5. Git命令提示符
C:\>git usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-pl--paginate|I--no-pager] [--no-replace-objects] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [-c name=value [--help] COMMAND [ARGS] The most commonly used git commands are: add Add file contents to the index bisect Find by binary search the change that introduced a bug branch List, create, or delete branches checkout Checkout a branch or paths to the working tree clone Clone a repository into a new directory commit Record changes to the repository diff Show changes between commits, commit and working tree, etc fetch Download objects and refs from another repository grep Print lines matching a pattern init Create an empty git repository or reinitialize an existing log Show commit logs merge Join two or more development histories together mv Move or rename a file, a directory, or a symlink pull Fetch from and merge with another repository or a local bra push Update remote refs along with associated objects rebase Forward-port local commits to the updated upstream head reset Reset current HEAD to the specified state rm Remove files from the working tree and from the index show Show various types of objects status Show the working tree status tag Create, list, delete or verify a tag object signed with GPG See ’git help COMMAND’ for more information on a specific command. C:\>_
- 使用Git签出Spring Roo。 在此步骤中,您将通过使用Git签出最新的源来创建Spring Roo的本地克隆。 打开命令提示符,然后转到要检出Spring Roo的位置。 输入
git clone git://git.springsource.org/roo/roo.git
。 等待直到完成。 这将在您签出Spring Roo的位置创建一个名为roo的新文件夹。 - 下载并安装Windows版GPG 。 GnuPG是GNU用于安全通信和数据存储的工具。 它可以用来加密数据和创建数字签名。 Roo使用GPG自动签署构建输出。 安装GPG后,请使用
gpg –list-secret-keys
。 您应该看到类似于清单6的输出。清单6. gpg list命令的结果
C:\dev\roo-sourcecode\roo>gpg --1ist-secret-keys C:/Users/xebia/AppData/Roaming/gnupg\secring.gpg sec 2048R/2F96093B 2010-07-03 uid shekhar (spring-roo) <shekhargu1ati84@gmai1.com> ssb 2048R/B77E5C63 2010-07-03 C:\dev\roo-sourcecode\roo>_
- 如果看不到输出,则意味着您首先需要创建一个密钥。 使用
gpg –gen-key
。 它将引导您完成一系列创建密钥的步骤。 然后,使用gpg –list-secret-keys
验证是否生成了新创建gpg –list-secret-keys
。 - 将您的密钥发布到公共密钥服务器。 记下
–list-secret-keys
显示的sec
密钥ID。 就我而言,它的ID为2F96093B。 通过gpg –keyserver hkp://pgp.mit.edu –send-keys 2F96093B
将您的公钥推送到密钥服务器。 (最后更改密钥ID)。 - 首先构建包装项目。 某些Roo模块要求使用OSGi形式的JAR。 也就是说,他们没有可识别OSGi的清单。 Roo有一个特殊的项目,称为wrapping ,可以将普通的JAR转换为OSGi JAR。 在尝试与Roo配合使用之前,您需要运行包装器。 没有包装,您将看到错误,指出Maven无法找到
org.springframework.roo.wrapping.some_module
。 要创建包装的JAR,请在Roo检出根目录中键入:cd wrapping mvn clean install cd..
- 运行
mvn clean install
命令。 (应该在您的系统上安装Maven V2。如果没有,请立即安装。)每次生成源代码时,它都会提示您输入密钥的密码/口令(在创建GPG密钥时输入了口令)。 输入密码,然后按Enter 。 构建源代码将花费几分钟。 - 在系统设置中设置环境变量ROO-DEV,该环境变量应指向Roo项目中的bootstrap文件夹。 您还应该将此变量添加到PATH环境变量中,如图3所示。
图3.设置ROO-DEV变量
您现在可以使用Roo的最新开发版本。 打开命令提示符,创建一个名为mkdir roo_dev_demo的新文件夹,然后启动roo-dev
命令。 您将看到清单7中所示的屏幕。
清单7. ROO-DEV外壳
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>
您可能需要更新Spring Roo源代码,以便使用最新版本的Spring Roo。 打开命令提示符,然后转到Spring Roo的源代码位置。 触发git pull
命令,该命令会将所有远程更改拉入本地克隆,然后执行mvn clean install
以构建更新的源。
结论
至此,我们已经构建了一个简单的Web应用程序,甚至没有打开我们的编辑器或引用任何文档。 该应用程序使您可以对实体执行CRUD操作。 我希望您看到Roo为Java开发人员带来了可观的生产力提高。 它使用了大多数开发人员已经知道的成熟且稳定的技术。
在第2部分中 ,我们使我们的应用程序更安全,添加国际化支持,添加消息传递支持(SMTP和JMS)以及自定义应用程序。 我们还将研究Roo的数据库反向工程功能,并将该应用程序转换为功能全面的企业应用程序。
翻译自: https://www.ibm.com/developerworks/java/library/os-springroo1/index.html