7

我正在使用 Spring Data JPA,这很奇怪,但它会尝试扫描(在部署期间)测试文件,这会导致错误:

java.lang.ClassNotFoundException: org.junit.runner.RunWith
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
...
WARN : org.springframework.core.type.classreading.AnnotationAttributesReadingVisitor - Failed to classload      type while reading annotation metadata. This is a non-fatal error, but certain annotation metadata may be     unavailable.

classnotfoundexception 是因为测试依赖项在 maven 的“测试”范围内。

但我的问题是,为什么要扫描测试文件夹?(/src/main/test)。

上下文配置如下:

 <jpa:repositories base-package="com.domain.repository" />

你能告诉我我做错了什么吗?我的 .classpath 内容如下:

<classpathentry kind="src" output="target/classes" path="src/main/java"/>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
...

我真的很感谢你在这方面的帮助。

4

2 回答 2

2

但我的问题是,为什么要扫描测试文件夹?(/src/main/test)

上下文配置如下:

<jpa:repositories base-package="com.domain.repository" />

准确地说,我不认为 Spring 正在扫描这个文件夹——毕竟它是你的源文件夹。它只查看已部署的包结构,我怀疑问题的原因与此有关。

我遇到了同样的问题,但它是由 Eclipse 中的错误部署配置引起的,而不是特定于 Spring 的。我已将 Eclipse 配置为将我的测试类src/test/java部署到目标部署包中,以便在我启动服务器时所有测试文件(当然具有相应的包结构)都存在。但是,从.classpath您发布的片段来看,我看到您明确将它们排除在部署之外。

不过,还有其他方式可以让类文件潜入您的部署。您是否能够验证测试类实际上不存在于已部署的包中?它们是否可以通过您设置的其他进程(可能是FileSynch插件)在那里同步?

另外,您是否有任何其他带有配置的 Spring 上下文文件来扫描其他基础包?

您可以添加更多关于 Eclipse 配置以及如何部署到测试服务器的详细信息以帮助解决问题。

于 2012-05-31T08:31:42.580 回答
0

这似乎是Spring中的一个错误“伪特性”:

https://jira.springsource.org/browse/SPR-9233

当它在运行时找不到注释类时会警告您,即使您的应用程序非常好。

于 2012-05-14T19:02:40.787 回答