如何配置用于 junit 测试的 eclipse 类路径?

2022-09-03 15:08:50

我有一个eclipse项目,其中每个源文件夹都有自己关联的输出文件夹。它不是 /classes,而是叫做 /eclipse-classes。

因此,如果我有一个文件夹:src/main/java(典型的maven事物),目标文件夹是:target/eclipse-classes。

资源等也是如此。

这似乎有效(即eclipse生成.class文件,这些文件放在这些文件夹中),但是运行任何Junit测试都会引发异常,指出“找不到类”。我正在使用内置的eclipse测试运行程序运行JUnit(即右键单击类,“运行方式”,“Junit测试”)。

将 /eclipse-classes 文件夹复制到 /classes 可以使它们成功,这意味着 eclipse 使用的是 /classes,但我找不到任何配置选项来更改它。有没有办法找出 eclipse 在哪里以及为什么仍在使用 /classes 文件夹?

(也许是相关的,我也在使用m2eclipse插件)

受富豪卖家答案启发的一些其他信息:Maven配置为对资源更改运行以下内容:

process-resources resources:testResources

虽然这不会做任何有用的事情(复制到错误的目录),但资源在atm上没有问题,因为它们最终位于正确的位置。

.classpath 条目看起来没问题。有一堆 maven 子项目,所以嵌套比 Rich 发布的内容要深一些,但除此之外,除了这一行之外,它完全相同:

<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>

我认为我们可能不需要那个,但它不会伤害任何东西。

edit2:进一步的测试显示,eclipse 在 /eclipse-classes 文件夹和 /classes 文件夹中生成类文件。似乎m2eclipse在自动构建时在后台运行mvn build,但我似乎找不到禁用它的方法。如果这里没有人有任何其他想法,我会尝试与m2eclipse开发人员取得联系。


答案 1

如果您使用 m2eclipse,则 Eclipse 项目中的配置将件覆盖。有关解决方案,请参阅此文章

这样做的原因是,一些 maven 插件无法处理 位于 之外的目录,因此无论您在 Eclipse 中配置什么,m2eclipse 开发人员都会强制将已编译类的文件夹设置为 和。target/target/classestarget/test-classes

通过使用配置文件,您可以对 Eclipse 使用不同的文件夹。尽管如此,更改maven(及其插件)的输出文件夹是不明智的。


答案 2

Eclipse JUnit 集成没有特殊的类路径配置,它将处理类路径中定义的输出文件夹,并应查找编译到这些文件夹中的所有类。可能是 .classpath 文件中有一些狡猾的东西,所以 JUnit 感到困惑(默认情况下,.classpath 文件从视图中隐藏,它位于项目的根目录中)。

根据您的描述,我希望看到如下所示的条目(请注意默认输出文件夹以及src/main/java和src/main/resources的覆盖)。您的类路径看起来是否明显不同,如果是这样,则可能是问题所在

<classpathentry excluding="**" kind="src" output="target/eclipse-classes" path="src/main/resources"/>
<classpathentry kind="src" output="target/eclipse-classes" path="src/main/java"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>

这是一个很长的镜头,但也可能是在你的项目上配置了一个Maven clean,如果是这种情况,每当运行干净的目标时,目标/eclipse类的内容都会被删除,所以你的测试将在测试运行之前从文件系统中删除。您可以通过打开项目属性 () 并选择 Maven 项来查看 Maven 运行的目标。alt-enter


这部分没有直接回答你的问题,但你可能会发现有用。我倾向于将 Eclipse 输出目录与 Maven 的输出目录相同,并且在 Eclipse 中没有任何问题(我将 Maven 构建器修改为仅运行进程资源,因此它不会尝试编译)。

如果我做一个Maven构建,Maven编译器将构建任何更改的类(如果包含干净,这将是所有类)。Eclipse 中的后续修改由增量编译器检测并处理,一切都很好。我确实关闭了Build Automatically,但这只是因为它惹恼了我,如果你都关闭了Maven和Eclipse,那可能是它们。


推荐