質問

I'm new to Java and have been working through some tutorials to familiarize myself with some of the frameworks and technologies like JSF, Spring, and RichFaces. I'm using MyEclipse as my IDE and found a pretty good article on RichFaces+JSF2 at http://www.ibm.com/developerworks/java/library/j-richfaces4/index.html. The rest of this question is centered around the RichFaces+JSF2 demo project shown in the link above.

Now, when I create a new web project in MyEclipse using either the J2EE spec level 5.0 or 6.0 and import the demo project files, I can get the demo project deployed to myeclipse tomcat and it works fine when I visit localhost:8080/[project-name]/index.jsf.

But, if I create a new web project (either spec level) and also add maven support (either standard or MyEclipse-style), and import the same demo project files in a similar fashion, for the life of me I can't get the web app up and running. I'm using the same localhost URL as above (and referencing the new project). Deployment error output is listed below.

What am I missing?


Jul 15, 2013 1:13:31 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Users\[username]\AppData\Local\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\bin;C:\Users\[username]\AppData\Local\MyEclipse\Common\plugins\com.genuitec.eclipse.easie.tomcat.myeclipse_9.0.0.me201211011550\tomcat\bin
Jul 15, 2013 1:13:31 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Jul 15, 2013 1:13:31 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 333 ms
Jul 15, 2013 1:13:31 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Jul 15, 2013 1:13:31 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.13
Jul 15, 2013 1:13:32 PM com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Mojarra 2.1.3 (FCS 20110908) for context '/rf4jee6stdmvn'
Jul 15, 2013 1:13:51 PM com.sun.faces.config.ConfigureListener contextInitialized
SEVERE: Critical error during deployment: 
java.lang.NoSuchMethodError: com.google.common.base.Platform.precomputeCharMatcher(Lcom/google/common/base/CharMatcher;)Lcom/google/common/base/CharMatcher;
    at com.google.common.base.CharMatcher.precomputed(CharMatcher.java:664)
    at com.google.common.base.CharMatcher.<clinit>(CharMatcher.java:71)
    at com.google.common.base.Splitter.on(Splitter.java:127)
    at org.richfaces.resource.ResourceLibraryFactoryImpl.<clinit>(ResourceLibraryFactoryImpl.java:43)
    at org.richfaces.application.DefaultModule.configure(DefaultModule.java:32)
    at org.richfaces.application.ServicesFactoryImpl.init(ServicesFactoryImpl.java:27)
    at org.richfaces.application.InitializationListener.createFactory(InitializationListener.java:139)
    at org.richfaces.application.InitializationListener.onStart(InitializationListener.java:112)
    at org.richfaces.application.InitializationListener.processEvent(InitializationListener.java:157)
    at javax.faces.event.SystemEvent.processListener(SystemEvent.java:106)
    at com.sun.faces.application.ApplicationImpl.processListeners(ApplicationImpl.java:2139)
    at com.sun.faces.application.ApplicationImpl.invokeListenersFor(ApplicationImpl.java:2115)
    at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:300)
    at com.sun.faces.config.ConfigManager.publishPostConfigEvent(ConfigManager.java:600)
    at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:369)
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:225)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
    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.deployDirectory(HostConfig.java:920)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
    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:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Jul 15, 2013 1:13:51 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener
java.lang.RuntimeException: java.lang.NoSuchMethodError: com.google.common.base.Platform.precomputeCharMatcher(Lcom/google/common/base/CharMatcher;)Lcom/google/common/base/CharMatcher;
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:292)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
    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.deployDirectory(HostConfig.java:920)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
    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:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.NoSuchMethodError: com.google.common.base.Platform.precomputeCharMatcher(Lcom/google/common/base/CharMatcher;)Lcom/google/common/base/CharMatcher;
    at com.google.common.base.CharMatcher.precomputed(CharMatcher.java:664)
    at com.google.common.base.CharMatcher.<clinit>(CharMatcher.java:71)
    at com.google.common.base.Splitter.on(Splitter.java:127)
    at org.richfaces.resource.ResourceLibraryFactoryImpl.<clinit>(ResourceLibraryFactoryImpl.java:43)
    at org.richfaces.application.DefaultModule.configure(DefaultModule.java:32)
    at org.richfaces.application.ServicesFactoryImpl.init(ServicesFactoryImpl.java:27)
    at org.richfaces.application.InitializationListener.createFactory(InitializationListener.java:139)
    at org.richfaces.application.InitializationListener.onStart(InitializationListener.java:112)
    at org.richfaces.application.InitializationListener.processEvent(InitializationListener.java:157)
    at javax.faces.event.SystemEvent.processListener(SystemEvent.java:106)
    at com.sun.faces.application.ApplicationImpl.processListeners(ApplicationImpl.java:2139)
    at com.sun.faces.application.ApplicationImpl.invokeListenersFor(ApplicationImpl.java:2115)
    at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:300)
    at com.sun.faces.config.ConfigManager.publishPostConfigEvent(ConfigManager.java:600)
    at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:369)
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:225)
    ... 24 more
Jul 15, 2013 1:13:51 PM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
Jul 15, 2013 1:13:51 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/rf4jee6stdmvn] startup failed due to previous errors
Jul 15, 2013 1:13:51 PM com.sun.faces.lifecycle.ELResolverInitPhaseListener populateFacesELResolverForJsp
INFO: JSF1027: [null] The ELResolvers for JSF were not registered with the JSP container.
Jul 15, 2013 1:13:51 PM com.sun.faces.config.ConfigureListener contextDestroyed
SEVERE: Unexpected exception when attempting to tear down the Mojarra runtime
java.lang.NullPointerException
    at org.richfaces.application.CacheProvider.release(CacheProvider.java:96)
    at org.richfaces.application.ServicesFactoryImpl.release(ServicesFactoryImpl.java:18)
    at org.richfaces.application.ServiceTracker.release(ServiceTracker.java:132)
    at org.richfaces.application.InitializationListener.onStop(InitializationListener.java:147)
    at org.richfaces.application.InitializationListener.processEvent(InitializationListener.java:159)
    at javax.faces.event.SystemEvent.processListener(SystemEvent.java:106)
    at com.sun.faces.application.ApplicationImpl.processListeners(ApplicationImpl.java:2139)
    at com.sun.faces.application.ApplicationImpl.invokeListenersFor(ApplicationImpl.java:2115)
    at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:300)
    at com.sun.faces.config.ConfigureListener.contextDestroyed(ConfigureListener.java:332)
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:3866)
    at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4500)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4364)
    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:920)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
    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:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Jul 15, 2013 1:13:52 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Jul 15, 2013 1:13:52 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Jul 15, 2013 1:13:52 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/15  config=null
Jul 15, 2013 1:13:52 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 20428 ms

UPDATE

thanks to the answer below, as well as this one, i figured out what was going on.

one of the maven dependencies of the myeclipse web projects with maven support was causing the issue. so i created an exclusion for that specific jar.

<dependency>
    <groupId>org.jboss.weld</groupId>
    <artifactId>weld-osgi-bundle</artifactId>
    <version>1.0.1-SP3</version>
    <exclusions>
        <exclusion>
            <artifactId>google-collections</artifactId>
            <groupId>com.google.collections</groupId>
        </exclusion>
    </exclusions>
</dependency>

the reason this works is because the richfaces demo project already includes guava, which according to the comment below this answer, is actually a newer version of google-collections.

also, sometimes after making changes to the project dependencies, a simple reload/refresh of the web app was not enough to push out the changes. i had to stop the server, remove the web app, restart the server, and re-deploy the application. perhaps that is standard practice for Java or MyEclipse or the specific changes that I was making, but I was not expecting to have to do that.

what a pain! but it has been a learning experience.

役に立ちましたか?

解決

That's a dependency conflict for some google's library, probably guava or google collection. To fix it, you need to have a look into your dependency tree. As you're using myeclipse, open your pom.xml file and in the tabs below select the dependency hierarchy view. Then search for the dependencies I told you. There can be different problems:

  • You're excluding a dependency for an artifact which needs it.
  • Maven is resolving a conflict with new Google's dependency, but this method is in the old one and a third-party library you are using makes use of it. In this case you should try to update your third party library or downgrade the version of the one you're using by your own.
  • For some artifact, you included a version of the API dependency and other version of the implementation. In this case, the execution expects to find this method but it's not available in the implementation.

Take a look to this related question.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top