最近的两周找了一些快速开发框架做了些尝试,一下是尝试后的一些心得。
第一个尝试的是 springside3.3.2 ,上手很容易,提供了简单的应用。但是一个十分严重的问题是它的代码生成问题。没有代码生成便没有快速开发,对于我这样一个懒人来说,这不是一个很好的选择。令我奇怪的是 springside 以前的版本曾经有过基于 acegi 的使用数据库的授权系统,不知道为什么换成了基于 XML 配置的。可能是跟 Appfuse 和 Spring Roo 学习的吧。
关于它的搭建:
十分简单,只要下载 maven 与 springside-3.3.2-all-in-one 包并正确安装,一切都十分的顺利。
Mvn-eclipse 插件的版本较低 2.0 ,但是不会出现莫名其妙的错误。
第二个尝试的是 Appfuse ,传说中的东西。但是令我十分失望的是,它最新的版本 2.1.0 -M1 没有提供以前一样详尽的文档,能够找到的文档资料大多是基于 ant 构建的,也就是 2.0 以前的版本的文档。 Appfuse 提供了工程的模板,但是发现只有 base 的情况下工程的目录是贴近实际开发的,并且此时的 pom 文件中的配置是最实用的。如果选择 light ,那么 pom 文件中要自己配置很多插件。
关于它的搭建:
这个东西的搭建过程中出现了很多的问题:
第一:中文资源文件的转码问题
这个问题是因为Appfuse默认的Maven的转码插件配置中少配置了中文资源文件导致的,只要将中文资源文件添加进去就可以了
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>native2ascii-maven-plugin</artifactId> <version>1.0-alpha-1</version> <configuration> <dest>target/classes</dest> <src>src/main/resources</src> </configuration> <executions> <execution> <id>native2ascii-utf8</id> <goals> <goal>native2ascii</goal> </goals> <configuration> <encoding>UTF8</encoding> <includes>ApplicationResources_ko.properties, ApplicationResources_no.properties, ApplicationResources_tr.properties, *_zh*.properties </includes> </configuration> </execution> <execution> <id>native2ascii-8859_1</id> <goals> <goal>native2ascii</goal> </goals> <configuration> <encoding>8859_1</encoding> <includes>ApplicationResources_de.properties, ApplicationResources_fr.properties, ApplicationResources_nl.properties, ApplicationResources_pt*.properties</includes> </configuration> </execution> </executions> </plugin> <resource> <directory>src/main/resources</directory> <excludes> <exclude>ApplicationResources_de.properties</exclude> <exclude>ApplicationResources_fr.properties</exclude> <exclude>ApplicationResources_ko.properties</exclude> <exclude>ApplicationResources_nl.properties</exclude> <exclude>ApplicationResources_no.properties</exclude> <exclude>ApplicationResources_pt*.properties</exclude> <exclude>ApplicationResources_tr.properties</exclude> <exclude>*_zh*.properties</exclude> <exclude>applicationContext-resources.xml</exclude> <exclude>struts.xml</exclude> </excludes> <filtering>true</filtering> </resource>
第二:Eclipse工程配置生成问题
如果直接使用
mvn eclipse:eclipse
那么很不幸的你会得到失败的提示,找了一下原因:
<plugin> <artifactId>maven-eclipse-plugin</artifactId> <version>2.6</version> <configuration> <additionalProjectnatures> <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> </additionalProjectnatures> <additionalBuildcommands> <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> </additionalBuildcommands> <downloadSources>true</downloadSources> <downloadJavadocs>true</downloadJavadocs> <wtpversion>1.5</wtpversion> </configuration> </plugin>
将此段修改就可以了,版本号使用2.6的不会发生问题,2.7与2.8都会导致失败
第三:代码生成的问题
这里面的问题多多,不但涉及到Maven的插件问题,还有文档的问题。貌似Appfuse的开发团队想要依靠服务赚钱了,所以文档是简单的有些过头了。
最后尝试的是Spring Roo,一个新生儿。但是它给我带来了惊喜。目前的发行版本是1.10M2,不推荐使用,因为在使用中发现了很多问题。使用1.0.2版本的Roo一切都很顺利。最值得一提的是它的代码生成功能,堪称完美。有人说ROR的脚手架是最好用的,我没有使用过ROR,但是我使用Roo的时候发现它的生成功能比Grails还要强大。它甚至可以生成要使用的查询条件。
搭建中的问题:
第一:GBK编码拷贝资源的问题
这个问题很好解决,在生成的pom文件中增加插件即可解决:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.4.2</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin>
第二:log4j的配置问题,这个其实很好解决。Roo已经提供了配置这个文件的shell命令,但是那样配置很麻烦,直接在src\main\resources\META-INF\spring下拷贝过去一个配置好的log4j.properties就可以了。
第三:修改已经生成的文件以实现功能:
这个问题是我觉得比较复杂的问题,因为Roo太智能了,并且用来生成最终执行二进制文件的辅助文件没有在IDE中显示出来。我使用的是STS,没有使用标准的Eclipse,所以不知道是不是都是这个情况。想修改源码,那么只能到文件系统中找到.aj结尾的文件修改。可能Roo的初衷就是大家再也不必去修改代码了。
第四:去除Roo的升级
这个是个大问题,因为Roo的版本升级需要完全去除上一个版本的东西,包括pom中的很多东西完全的不兼容,因此,升级是个大问题。
第五:一个最最让我困惑的问题
很多人都试用过了Roo,但是我没发现别人跟我一样遇到了中文输入的问题,可能是的版本或者其他配置的问题。最后在我更改了如下代码后,一切都正常了,中文不再是火星文了
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin>
这个问题我深入的思考了下,可能还跟我的数据库有关,我使用MySQL的时候出现了乱码,但是同样的库Appfuse一切正常
另外值得一提的是,Spring Roo的文档虽然是英文的,但是基本想要的东西都能找到。文档附录中有命令的详解。