Criando aplicação do zero com Struts 2: Exception

Estou criando uma aplicação com struts 2 do zero, estou me guiando por uma java magazine passada que trazia uma materia sobre o assunto. Aparentemente eu configurei tudo certo, mas pego a exception ao iniciar o servidor:

Unable to load bean: type:com.opensymphony.xwork2.ObjectFactory class:org.apache.struts2.spring.StrutsSpringObjectFactory - bean - jar:file:/C:/Arquivos%20de%20programas/Java/Projetos/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/webapps/ibge-censo-manager/WEB-INF/lib/struts2-spring-plugin-2.0.6.jar!/struts-plugin.xml:8:132
	at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:209)
	at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:101)
	at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:131)
	at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:52)
	at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:398)
	at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:455)
	at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:201)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:221)
	at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:302)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:78)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3635)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4222)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:448)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
	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:295)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Caused by: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContextAware
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
	at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
	at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:873)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1326)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
	at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
	at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:873)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1326)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205)
	at com.opensymphony.xwork2.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:139)
	at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:181)

A mensagem é compreensivel, não encontrou uma classe. Mas que classe é essa? Porque esta tentando iniciar algo de spring? Eu não estou usando spring. Alguma idéia?

O Struts 2 usa por padrão o Spring pra IoC. Acho que dá pra mudar isso mudando a struts.properties, especificamente a chave struts.objectFactory. Mas nunca tentei fazer isso.

[]'s

Rodrigo Auler

Mas tá faltando algum jar? Digamos que eu queira manter o spring.

Deve tá faltando os jars do Spring. Uma maneira fácil de começar uma aplicação Struts2 do zero é usando o Maven 2. No link abaixo tem explicado como fazer isso usando um archetype do Maven e já vem com as dependências básicas, como os jars do Spring.

http://struts.apache.org/2.x/docs/ready-set-go.html

[]'s

Rodrigo Auler

Vc lembrou de adicionar a library do projeto todos os jars? Eles são:

  1. commons-logging-1.0.4.jar
  2. freemaker-2.3.8.jar
  3. ognl-2.6.11.jar
  4. struts2-core-2.0.6.jar
  5. xwork-2.0.1.jar