我正在使用Spring数据JPA存储库。
我的测试在IDEA中运行良好,生产代码在Tomcat中运行,但是在runnung gradle测试中,我收到了无法创建应用程序上下文的异常
... 61 more
Caused by: java.lang.IllegalArgumentException: Not an managed type: class com.test.FullNamespaceConfig
我的类有@Entity注释,并从@MappedSuperclass继承另一个类
这里可能有什么问题?在IDEA和gradle中运行有什么区别(IDEA项目是使用gradle idea生成的)
它是带弹簧的gradle模块:
<context:annotation-config/>
<context:component-scan base-package="com.test.dao"/>
<context:component-scan base-package="com.test.reports"/>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${database.driver}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${database.user}"/>
<property name="password" value="${database.password}"/>
</bean>
<!-- Declare a JPA entityManagerFactory-->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property>
<property name="persistenceUnitName" value="hibernatePersistenceUnit"/>
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="${database.showSql}"/>
<property name="databasePlatform" value="${hibernate.dialect}"/>
</bean>
</property>
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
</property>
<property name="packagesToScan" value="com.test"/>
</bean>
<!-- Declare a transaction manager-->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<jpa:repositories base-package="com.test.dao"/>
答案 0 :(得分:4)
Gradle将类和资源放在单独的输出目录中,这是JPA不喜欢的。尝试:
sourceSets.main.output.resourcesDir = sourceSets.main.output.classesDir
sourceSets.test.output.resourcesDir = sourceSets.test.output.classesDir
答案 1 :(得分:0)
有限的信息,但似乎com.test.FullNamespaceConfig是一个实体,对吗?它存在于您的测试项目中?如果是这样,那么测试项目中可能缺少一个persistence.xml文件,这意味着未检测到该实体。 如果您能提供更多有关项目结构的数据,将会很有帮助。