Externalizei algumas classes em comum entre vários projetos, em um projeto separado.
Após isso, estou recebendo essa exceção do VRaptor. Preciso fazer algum mapeamento adicional?
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.cauirs.nome.infra.CriadorDeSessionFactory': FactoryBean threw exception on object creation; nested exception is java.lang.NoClassDefFoundError: Lbr/com/cauirs/tipos/Dinheiro; at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:150) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:109) at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1387) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:244) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189) at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:820) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:762) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:680) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:771) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:691) ... 64 more Caused by: java.lang.NoClassDefFoundError: Lbr/com/cauirs/tipos/Dinheiro; at java.lang.Class.getDeclaredFields0(Native Method) at java.lang.Class.privateGetDeclaredFields(Class.java:2308) at java.lang.Class.getDeclaredFields(Class.java:1760) at org.hibernate.annotations.common.reflection.java.JavaXClass.getDeclaredFieldProperties(JavaXClass.java:102) at org.hibernate.annotations.common.reflection.java.JavaXClass.getDeclaredProperties(JavaXClass.java:126) at org.hibernate.annotations.common.reflection.java.JavaXClass.getDeclaredProperties(JavaXClass.java:121) at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:259) at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:223) at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:686) at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3977) at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3931) at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1368) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1826) at br.com.cauirs.nome.infra.CriadorDeSessionFactory.abrirSessionFactory(CriadorDeSessionFactory.java:35) at br.com.cauirs.nome.infra.CriadorDeSessionFactory.getInstance(CriadorDeSessionFactory.java:47) at br.com.cauirs.nome.infra.CriadorDeSessionFactory.getInstance(CriadorDeSessionFactory.java:1) at br.com.caelum.vraptor.ioc.spring.ComponentFactoryBean.getObject(ComponentFactoryBean.java:43) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:143) ... 73 more Caused by: java.lang.ClassNotFoundException: br.com.cauirs.tipos.Dinheiro at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) ... 91 more
Class CriadorDeSessionFactory
@Component
@ApplicationScoped
public class CriadorDeSessionFactory implements ComponentFactory<SessionFactory>
{
private Map<Tenant, SessionFactory> conexoes = new HashMap<Tenant, SessionFactory>();
private SessionFactory abrirSessionFactory()
{
SessionFactory conexao;
Configuration configuracao = new Configuration();
String arquivoConfiguracao = new StringBuilder().append("hibernate").append(".cfg.xml").toString();
configuracao.configure(arquivoConfiguracao);
configuracao.addAnnotatedClass(Venda.class); //ERRO OCORRE NESSA LINHA
conexao = configuracao.buildSessionFactory();
return conexao;
}
@Override
public SessionFactory getInstance()
{
SessionFactory conexao = conexoes.get("hibernate");
if( conexao == null )
{
conexao = abrirSessionFactory();
}
return conexao;
}
}
Classe Venda:
@Entity
@Table(name="venda")
@XStreamAlias("venda")
public class Venda
{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Embedded
private Dinheiro valorItens = new Dinheiro();
.....
}
Observações:
1) O projeto está referenciado no Eclipse, tanto é que consigo usar a classe no código.
2) Se copio a classe Dinheiro para dentro do projeto, funciona.