【问题标题】:Eclipse Photon does not resolve imports in test sourcesEclipse Photon 无法解析测试源中的导入
【发布时间】:2018-12-08 14:18:37
【问题描述】:

我已移至具有现有工作区的 Eclipse Photon。我在这个工作区中有一些 Maven 项目。所有项目在 Eclipse Oxygen 中都没有任何错误。在 Eclipse Photon 中打开我的工作区后,所有导入 org.mockito.Mockitoorg.springframework.mockorg.springframework.test 的测试类都有错误。尽管 Eclipse 知道它们,但这些导入无法解析,因为我可以跳转到这些类中。

为什么 Eclipse Photon 不能解析这些导入?我该如何解决这个问题?

【问题讨论】:

  • Photon 在测试中表现最差..
  • eclipse-jee-2019-03-R 也是一样,最近 eclipse 的 bug 很多。

标签: java testing mockito spring-test eclipse-photon


【解决方案1】:

如果这真的是一个 maven 项目,并且您使用的是匹配的 m2e-version 1.9,它应该会自动配置“包含测试源。”-正确设置和相关设置。

您可能需要通过右键单击项目并选择“Maven”>“更新项目”来更新项目类路径

【讨论】:

  • 我在另一个有同样问题的项目上做了一个 Maven“更新项目”。它解决了它。我认为这是关于如何解决它的适当答案..
  • 我们刚刚更新到 Photon,我们所有的 src/test/** 路径都标有“Contains test sources=No”(使用 m2e 1.9.0.20180606-2036)。 pom.xml 的哪一部分告诉 m2e 哪些路径包含测试源?
  • 快速查看代码:m2e 向 maven 询问 maven.apache.org/ref/3.5.0/apidocs/org/apache/maven/project/…(或测试变体)的值,这些值通常基于 <sourceDirectory><testSourceDirectory> 进行配置,但它只做如果 maven-compiler-plugin 的执行已配置且未设置为被 m2e 忽略
  • 感谢 @till-brychcy,添加一个空的 'maven-compiler-plugin' 构建配置就可以了
  • 不幸的是,m2e 1.9 版跳过了 并且实际上在 Alt+F5 之后再次关闭了“包含测试源”
【解决方案2】:

我解决了它并想分享我的结果。

eclipse photon 中的构建路径属性在源选项卡中有一个新选项:包含测试源。对于文件夹 myproject/src/test/java,此选项设置为 No。当我尝试将其设置为 Yes 时,出现以下错误:

项目“myproject”中的源文件夹“src/testjava”必须有一个 不用于主要来源的输出文件夹

虽然输出文件夹已设置为与myproject/src/main/java 不同的路径,但仍显示错误。要重置设置,我取消选中选项允许源文件夹的输出文件夹并再次设置所有输出文件夹。之后,我可以将提到的选项设置为 Yes。结果,导入得到了解决。

原因描述为here(向下滚动到测试来源)。它说:

对于每个项目,编译现在分两个阶段完成:首先 主要来源(在构建路径上看不到任何测试代码)和 然后是所有测试源。

由于没有为 test-source-folder 设置该选项,因此它被编译为 main-source-folder。因此,无法解析从具有 test 范围的依赖项导入的测试类。

【讨论】:

    【解决方案3】:

    对于我基于 Maven 的项目,我能够通过进入项目的 .classpath 文件并添加一个...来解决问题。

    <attribute name="test" value="true"/>
    

    标记属性,即,

    <classpathentry kind="src" output="target/test-classes" path="src/test/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
            <attribute name="test" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
            <attribute name="test" value="true"/>
        </attributes>
    </classpathentry>
    

    希望对您有所帮助。

    【讨论】:

    • 你拯救了我的一天!有什么解释吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    相关资源
    最近更新 更多