DSpace的最新版本是1.5,和以前的版本最大不同是它根据用户接口和web服务划分成很多模块,由maven管理,
每个模块都可以作为单独的一个工程来使用。
一. 准备工作
我的环境 Eclipse3.3 欧版,安装如下插件。下面是插件的升级地址,可以从Eclipse中直接update。其中 Sysdeo Tomcat plugin 是为项目调试准备的。如果某个插件有相应的依赖项未安装,找到并update即可。
Tomcat、Svn、Maven 以及 Postgre数据库,相信你已经在本机安装并配置好了。
SubVersive plugin: http://www.polarion.org/projects/subversive/download/1.1/update-site/
SubClipse plugin: http://subclipse.tigris.org/update_1.2.x
Sysdeo Tomcat plugin: http://www.eclipsetotale.com/tomcatPlugin.html
Maven2 plugin: http://m2eclipse.sonatype.org/update/
二. 集成步骤
1. dspace官网提供3种集成方式,One-Big-Project Approach 、The One-Project-Per-Module Approch、 The Combined Approach ,我选用的是第二种方式The One-Project-Per-Module Approch,这种方式的优点是每个模块单独作为一个项目,可同时调试;第一种方式是所有模块生成一整个大的项目,只能作为一个context来调试。
先svn检出源码,选择所有七个模块执行maven插件的2步操作
Maven -> Enable Dependency Management 和 Maven -> Update Source Folders。
2. 在Build and Install DSpace的过程中,新建的maven任务,先建立 Dspace-Assemble、Dspace-Clean、Jspui-Assemble 几个就行,而且没有必要像原文说的在External Tools Dialog中设置,只要在Open Run Dialog 中设定即可;运行 Dspace-Assemble,编译成功后刷新项目,会发现在每个模块下面生成了一个target目录。
3. 建立build目标文件夹,比如在d盘建一个文件夹dsapce,再在下面建个config目录(D:\dspace\config)。
拷贝[workspace]/dspace/target/dspace-[version].dir/config/dspace.cfg 到 D:\dspace\config 下并修改相应参数,如 dspace.dir = [dspace] 修改为 dspace.dir = d:/dspace 。
然后 ant 执行 [workspace]/dspace/target/dspace-[version].dir 目录下面的build.xml脚本的
fresh-install。(之前 Postgre 数据库先建好)。
4. dspace1.4中的方法是在build的目标文件夹下的bin目录里 (如:D:\dspace\bin),cmd命令行执行
dsrun org.dspace.administer.CreateAdministrator ,按照提示建立一个 dspace 的用户 (E-Person);
dspace1.5中没有dsrun.bat等文件,如果想要使用cmd命令,只需从dspace1.4版本的相应目录下,拷贝3个文件过来(dsrun.bat, buildpath.bat, dsrun)即可。当然也可以从运行界面上来注册用户。
5. 最后将build生成的模块放到tomcat的webapp下、即可运行演示。
如果想在Eclipse中调试,前面的Sysdeo Tomcat plugin 插件就用上了
首先修改第二步中设定的maven任务,在 Dspace-Assemble 和 Jspui-Assemble 中添加参数 dspace.config = d:/dspace/config/dspace.cfg ;
其次是选中子项目(模块)如 Jspui ,右键->Properties->tomcat,插件属性里面选中 "Is a Tomcat Project",设定名字如 dspace-jspui ,设定web root 如 \dspace-jspui-webapp\target\dspace-jspui-webapp-1.5.1-SNAPSHOT 。
哦了,然后通过插件启动Tomcat,设置断点就可以调试了。
三. 经验提示
1. 数据库最好是Postgre8.2 ,记得用Postgre8.3时会碰到问题。
2. 启动Tomcat出现如下错误。
严重: Error configuring application listener of class org.apache.commons.fileupload.servlet.FileCleanerCleanup
java.lang.ClassNotFoundException: org.apache.commons.fileupload.servlet.FileCleanerCleanup
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3770)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4334)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:615)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2008-5-30 9:54:52 org.apache.catalina.core.StandardContext listenerStart
是因为 FileCleanerCleanup 是 commons-fileupload1.2 以后的版本才有的类,下载的文件中jar包的版本是1.1的所以会报错。
因为dspace子项目(模块)下的Pom文件中没有依赖项的版本号,自己添加version也还是不行,系统还是找原来的版本。后来看到Pom文件的parent设置如下:
<parent>
<groupId>org.dspace</groupId>
<artifactId>dspace-parent</artifactId>
<version>1.5.1-SNAPSHOT</version>
</parent>
这下就好办了,找到 C:\Documents and Settings\[current-user]\.m2\repository\org\dspace\dspace-parent\1.5.1-SNAPSHOT 目录,打开 dspace-parent-1.5.1-SNAPSHOT.pom 文件。修改相应依赖的版本号,maven会自动更新为新的jar包。
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.1</version>
</dependency>
3. 启动Tomcat还可能出现“error listener start ”的错误,初看也不知道什么原因,描述的太简单了。遂查看了一下Tomcat的日志获取到错误的详细信息如下。
严重: Error configuring application listener of class org.apache.commons.fileupload.servlet.FileCleanerCleanup
java.lang.NoClassDefFoundError: org.apache.commons.io.FileCleaningTracker
这个错误是因为 FileCleaningTracker是commons-io1.4版本才有的类。看来也是由于下载的jar包版本低造成的,用2中的方法来解决这个问题咯。
参见Dspace的wiki:http://wiki.dspace.org/index.php/IDE_Integration:_DSpace,_Eclipse_and_Tomcat#Eclipse