[求助]有关roller部署到eclipse中的问题
Bing 2010-04-06 09:59:47 最近几天一直想看下roller,我从网上下载了roller的源码,按照网上的方法但是不成功,哪位大虾把roller在eclipse上编译后放到tomcat成功过!
①把roller-src/apps/weblogger/src/java目录下的org整 个目录的源文件复制到项目中的src里面;
②向lib中添加jar文 件。二种方法,可以从roller-src中的tools目录中逐个目录地把所有的jar文件拷贝出来,为了简单起见,还是从它的发布程序中直接拿更方便,从roller-bin中的WEB-INF/lib下面的所有jar都复制出来,放到我们的项目中的lib中去;
③ roller默 认是使用MySQL数据库,但是lib里面缺少MySQL的JDBC驱动,所以还要自己从网上下载驱动的jar,添加到WEB-INF/lib中,如果你是使用的其它数据库,同样需要手动下载它对应的驱动程序;
④从roller-bin中复制除了WEB-INF目录以外的所有文件,粘贴到我们项目中的WebRoot下面, 这些是页面文件和一些资源文件;
⑤复制roller-bin中的WEB-INF目 录下除了classes外的所有文件到我们项目中的WEB-INF目录下,覆盖掉默认的web.xml,你还可以发现它的一些jsp文件是放在WEB-INF下面的,起到很好的保护作用,roller是基于struts2开发的;
⑥从roller-bin中的WEB-INF/classes目录中,复制除了org目录外的所有文件,到我们项目中的src里面,这些是系统的配 置文件,包括了国际化资源、struts配置、log配置、数据库脚本等等。
⑦ roller还 用到了邮件功能,需要把activation.jar,mail.jar二个j2ee的jar复制到tomcat的common/lib目录下,如果没有这一步,可能启动初始化会失败!导致应用无法正常运行。
修改部分内容
①在我们项目的src中新建一个名称为roller-custom.properties的文件,roller采 用这个扩展配置现覆盖系统的默认配置。网上有些说要把这个文件放到tomcat的common/classes中,其实不用的,只要放在classpath中能找到就行了,所以我们把它放在我们的src目录下面,方便修改,在该文件中添加如下内容:
installation.type=auto
database.configurationType=jdbc
database.jdbc.driverClass=com.mysql.jdbc.Driver
database.jdbc.connectionURL=jdbc:mysql://localhost:3306/rollerdb?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8
database.jdbc.username=scott
database.jdbc.password=tiger
mail.configurationType=properties
mail.hostname=smtp-server.example.com
mail.username=scott
mail.password=tiger
注意database.jdbc.connectionURL这个配置后面需要带上上面编码的参数,不然安装的过程可能会出现一些乱码。修改url和username,password这些,如果你有能正常使用的邮箱服务器,也填上。
②创建MySQL数据库,名称为rollerdb,并指定编码为UTF-8。如果你使用的是root用户,则不用授权,如果不是,则需要 为用户授权,下面是一个示例:
启动roller的 时候它会查询数据库是否已经初始完成,如果没有,它会自动进入安装页面,引导用户进行安装,做得非常人性化。
③修改部分源代 码。org.apache.roller.weblogger包里面的pojos包是有问题的!刚开始的时候老是无法启动,报错提示的是JPA的一个异常,根本不知道如何解决,后来在CSDN上找到一篇文章,说是pojos这个包的源码有问题,可能跟发布包中的版本不一致,所以需要用变态一点的处理办法。
在我们的项目WEB-INF/lib中,找到roller-business.jar和roller-web.jar(如上图所示),这二个jar其实就是我们src中的所有java文 件的编译打包,为了不重复,先把roller-web.jar删除掉,然 后用winrar打开roller-business.jar,删除pojos以 外的其它四个包和那个WebloggerException.class。 这样,其它代码可以正常编译!
——————————————————————————————————————————————————————
我按照了上面的方法在eclipse中部署了roller可惜的是查看tomcat日志文件发现错误,找了好久还是找不到原因,求各位大侠们帮忙:
ERROR 2010-04-06 09:40:23,812 JPAPersistenceStrategy:<init> - ERROR: creating entity manager
javax.persistence.PersistenceException: Provider error. Provider: org.apache.openjpa.persistence.PersistenceProviderImpl
at javax.persistence.Persistence.createFactory(Persistence.java:175)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:111)
at org.apache.roller.weblogger.business.jpa.JPAPersistenceStrategy.<init>(JPAPersistenceStrategy.java:123)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at com.google.inject.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:46)
at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:142)
at com.google.inject.InjectorImpl$ImplicitBinding.get(InjectorImpl.java:1006)
at com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:37)
at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:756)
at com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:35)
at com.google.inject.Scopes$1$1.get(Scopes.java:53)
at com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
at com.google.inject.BindingBuilderImpl$ImplicitImplementation.get(BindingBuilderImpl.java:334)
at com.google.inject.InjectorImpl$SingleParameterInjector.inject(InjectorImpl.java:640)
at com.google.inject.InjectorImpl.getParameters(InjectorImpl.java:666)
at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:140)
at com.google.inject.InjectorImpl$ImplicitBinding.get(InjectorImpl.java:1006)
at com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:37)
at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:756)
at com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:35)
at com.google.inject.Scopes$1$1.get(Scopes.java:53)
at com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
at com.google.inject.BindingBuilderImpl$FactoryProxy.get(BindingBuilderImpl.java:299)
at com.google.inject.InjectorImpl$9$1.call(InjectorImpl.java:708)
at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:747)
at com.google.inject.InjectorImpl$9.get(InjectorImpl.java:702)
at com.google.inject.InjectorImpl.getInstance(InjectorImpl.java:728)
at org.apache.roller.weblogger.business.GuiceWebloggerProvider.bootstrap(GuiceWebloggerProvider.java:87)
at org.apache.roller.weblogger.business.WebloggerFactory.bootstrap(WebloggerFactory.java:134)
at org.apache.roller.weblogger.business.WebloggerFactory.bootstrap(WebloggerFactory.java:99)
at org.apache.roller.weblogger.ui.core.RollerContext.contextInitialized(RollerContext.java:156)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
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.deployDirectory(HostConfig.java:926)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
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:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: <0.9.7-incubating nonfatal general error> org.apache.openjpa.util.GeneralException: org.xml.sax.SAXNotRecognizedException: http://java.sun.com/xml/jaxp/properties/schemaLanguage
at org.apache.openjpa.lib.meta.XMLMetaDataParser.parseNewResource(XMLMetaDataParser.java:376)
at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:315)
at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:292)
at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:266)
at org.apache.openjpa.persistence.PersistenceProductDerivation$ConfigurationParser.parse(PersistenceProductDerivation.java:440)
at org.apache.openjpa.persistence.PersistenceProductDerivation.parseResources(PersistenceProductDerivation.java:291)
at org.apache.openjpa.persistence.PersistenceProductDerivation.load(PersistenceProductDerivation.java:258)
at org.apache.openjpa.persistence.PersistenceProductDerivation.load(PersistenceProductDerivation.java:156)
at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:70)
at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:82)
at javax.persistence.Persistence.createFactory(Persistence.java:171)
... 57 more