前提条件
- 一个未使用Maven管理的SmartGWT项目,下文中称为原始项目
- maven版本为3.1.0
操作流程
第一步 基于Maven创建一个SmartGWT项目
关于这一步的内容,我已经在我的另外一篇博客中有了详细的介绍,这里我就不再重复说明,而只是把地址贴出来,大家可以去看看。
点击上面图片或者点击这里进行跳转
这里有一些内容的补充:
- 在上文介绍的另外一篇介绍如何创建SmartGWT的博客中有一张图片如下所示
这是在设置要建立的Maven项目的坐标信息和模块信息。要注意的是上图中第1步中的Package:
输入框。这里建议包名跟原始项目的包名保持统一;还有就是第2步的模块名称也跟原始项目保持统一。
第二步 根据原始项目进行改造
在上一步操作之后,已经得到了一个非常简单的SmartGWT项目了,这就是我们想要的,现在就要把一些原始项目里面的内容转移到新项目里面去。
依赖JAR包的设置
有一点比较苦恼的是,当项目大到一定的程度之后,依赖的JAR包会比较多,如果你刚好是原始项目框架的构建人员,那么祝贺你,你应该知道每一个JAR包都是谁家的,有什么作用,用的是哪个版本,这样你就可以推测出这个JAR包的Maven坐标。如果你只是一个普通开发人员的话,你不一定知道所有的JAR包及其版本,这个时候,你可以通过JAR包内的一些内容来猜测。
- 打开原始项目中依赖的JAR包,如下图所示:
打开文件可以看到如下内容,这就得到了这个JAR包的坐标信息
- 如果上一步不能依赖文件的pom.xml文件,那么就只能去搜索了,有一些网站提供了Maven坐标的搜索,你只要输入一些相关的信息。
点击打开搜索网站,或者点击如下图片
这里有必要了解的Maven知识是,一般来说,基于Maven管理的JAR包,包名一般是:groupId+artifactId
。所以这也是一个可以参考的信息。
不一定能够确定所有的JAR包的坐标和版本,这时候只能通过其他方式来确定坐标,比如跟项目构建人员沟通。还有一种情况是,有一些JAR包基于一些原因,比如版权、历史原因等因素,也同样是不能在远程Maven仓库中下载到的,那么这个时候,就需要私服亮相了,如果你没有搭建私服,建议你搭建一个私服,因为搭建私服非常简单,而且很好用。如果你搭建了自己的私服,你就可以把一些不能确定的或者因为各种原因远程Maven仓库中没有的又或者是自己编写的一些包上传到私服上,这样就可以通过坐标来依赖这些包了。
源代码的改造
把原始项目的源代码复制到新项目中。我假设你的原始项目的文件结构跟我的一样,如果跟我的不一样,你可以参照着来修改。
原始项目的文件结构如下图所示:
新项目的文件结构如下所示:
- 在原始项目中,源文件放置在
src
之下,复制所有的源代码,粘贴到新项目中的源文件夹src/main/java
下 - 在原始项目中,测试的代码都放置在
test
之下,复制所有的测试代码,粘贴到新项目中的测试源文件夹src/test/java
下 - 原始项目中GWT的模块配置文件
XXX.gwt.xml
是放置在client
包同一层结构,如下图所示:
在新项目中,模块配置文件建议不要跟资源文件放在一起了,而应该放到资源文件夹src/main/resource
之下了,但是直接粘贴它放置进去也是不对的,而应该建立相同的文件深度。如下图所示:
- 删除新项目中
webapp
下的全部文件,把原始项目中war
结构下的所有文件复制到新项目中的webapp
下
- 删除
classes
和lib
文件夹,因为使用Maven管理项目,已经不用把依赖的JAR包放进项目里面了。
- 检查GWT的首页是否发生了变化,如果发生了变化,请打开
pom.xml
文件中插件gwt-maven-plugin
的配置进行修改。如下图所示:
到这里,一个基于Maven的SmartGWT的项目也就改造完了,但是并不是说就一定完成了,这要看你原始项目的情况。比如在首页index.jsp(你的不一定是这个),如果要运行SmartGWT代码,需要加入SmartGWT的一些js包,代码如下所示:
<script type="text/javascript">
var isomorphicDir = "<模块名称>/sc/";
</script>
<!--include the SC Core API-->
<script type="text/javascript" src='<模块名称>/sc/modules/ISC_Core.js?isc_version=11.0p_2016-09-13.js'></script>
<!--include SmartClient -->
<script type="text/javascript" src='<模块名称>/sc/modules/ISC_Foundation.js?isc_version=11.0p_2016-09-13.js'></script>
<script type="text/javascript" src='<模块名称>/sc/modules/ISC_Containers.js?isc_version=11.0p_2016-09-13.js'></script>
<script type="text/javascript" src='<模块名称>/sc/modules/ISC_Grids.js?isc_version=11.0p_2016-09-13.js'></script>
<script type="text/javascript" src='<模块名称>/sc/modules/ISC_Forms.js?isc_version=11.0p_2016-09-13.js'></script>
<script type="text/javascript" src='<模块名称>/sc/modules/ISC_RichTextEditor.js?isc_version=11.0p_2016-09-13.js'></script>
<script type="text/javascript" src='<模块名称>/sc/modules/ISC_DataBinding.js?isc_version=11.0p_2016-09-13.js'></script>
<script type="text/javascript" src='<模块名称>/sc/modules/ISC_Calendar.js?isc_version=11.0p_2016-09-13.js'></script>
<script type="text/javascript" src='<模块名称>/sc/modules/ISC_Drawing.js?isc_version=11.0p_2016-09-13.js'></script>
直接把代码加入到首页<body>
元素的最下面,而且记得把<模块名称>
缓存你的模块的名称。
相关知识点
- 跟用Maven创建的普通web项目不同,一般情况下,普通web项目中
src/maim/resource
下放置的资源文件是在war下面的,而使用Maven骨架gwt-maven-plugin 2.7.0
创建出来的文件结构中,src/maim/resource
下放置的资源是放置在/WEB-INF/classes
- 如果报错:
Cannot change version of project facet Dynamic Web Module to 3.0.
,可是查看这个网站给出的解决办法:https://my.oschina.net/cloudcoder/blog/362949