【问题标题】:Junit package naming conflict in Eclipse (Maven)Eclipse(Maven)中的Junit包命名冲突
【发布时间】:2013-02-12 02:13:42
【问题描述】:

我想为我的 junit 测试使用默认的 maven 目录,所以:

  • 在 Eclipse 中,我创建了一个 test/java 文件夹。
  • 我在其中创建了一个带有package com.xxx.xxx.tracker.utils.test; 的junit 类

但是eclipse给了我一个错误。它想将包名更改为

package test.java.com.xxx.xxx.tracker.utils.test;

或者eclipse要我把它移到对应com/xxx/xxx/tracker/utils/test的文件夹中

以下是来自 eclipse 的确切信息:

  • 声明的包“com.xxx.xxx.tracker.utils.test”与预期的包“test.java.com.xxx.xxx.tracker.utils.test”不匹配
  • 提供 2 个快速修复程序
  • 将 xxxTest.java 移动到 'package com.xxx.xxx.tracker.utils.test'
  • 将包声明更改为“test.java.com.xxx.xxx.tracker.utils.test”

我想将 junit 保留在 test/java 文件夹中,以使其不受构建并遵循约定,但在我的包名称中包含 test.java 没有意义。

有没有办法让包名保持我想要的方式,并将它放在 test/java 文件夹中?

编辑:是因为我的“src”文件夹中有项目吗?例如:

src/
   com.xxx.xxx.tracker.utils.Xxxx.java
   test/
       java/
           com.xxx.xxx.tracker.utils.XxxxTest.java

这个项目不是从 Maven 开始的。它是由其他人转换的。

编辑 2:火上浇油:

这是我的 pom.xml 中的一些内容(我没有设置)。

<build>
<sourceDirectory>/home/me/workspace/proj_PARENT/proj_Classes/src</sourceDirectory>
<testSourceDirectory>/home/me/workspace/proj_PARENT/proj_Classes/src/test/java</testSourceDirectory>

我确实有 eclipse m2e 插件。

【问题讨论】:

  • 这不应该发生。你能发布 Eclipse 的抱怨吗?
  • 谢谢!添加了日食消息。
  • 您在 pom.xml 编辑器中的 sourceDirectory / testSourceDirectory 值的哪个选项卡上。你在“有效的 pom”标签中吗?
  • 在 sourceDirectory 中嵌套 testSource 势必会导致问题...您可以通过从 src 文件夹中排除 src/test 来手动配置构建路径,但是当您使用 m2e 更新项目配置时插件你应该得到一个“不能嵌套”的异常。
  • 是的。我在看有效的pom。我现在正走在“做正确的事”并将所有源代码移动到 src/main/java 的道路上。我现在看到了嵌套冲突。

标签: java eclipse maven junit


【解决方案1】:

你的结构和类路径有问题。使用您描述的布局,文件夹 src 是您的来源的根目录。但它包含测试,它应该在一个子文件夹中。在您的情况下,您有嵌套的源文件夹。这一定会导致编译问题,因为 *.java 文件将出现在两个包中。其中一个包无效。

src/
   com.xxx.xxx.tracker.utils.Xxxx.java
   test/
       java/
           com.xxx.xxx.tracker.utils.XxxxTest.java

现在您应该创建两个 src 文件夹。

src/
   main/
       java/
           com.xxx.xxx.tracker.utils.Xxxx.java
   test/
       java/
           com.xxx.xxx.tracker.utils.XxxxTest.java

【讨论】:

  • 奖励为第一人看到嵌套目录结构问题的答案。谢谢!
【解决方案2】:

在 Eclipse 中遵循标准 Maven 目录布局的 maven 项目应该在其构建路径中包含以下源文件夹(来自 .classpath 文件的 sn-p)

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

您的 Eclipse 项目浏览器应该如下所示:

如果您使用的是 Eclipse m2e 插件,在您的项目上创建 src/main/java 和 src/test/java 文件夹将导致它们自动添加到构建路径中。

更新:

在您的问题更新中,您表明您将 testSourceDirectory 嵌套在 sourceDirectory 中。 大多数 IDE 会警告您不要这样做,并且很可能会导致问题。 Eclipse 可以通过从源文件夹中排除测试部分来处理它,但是每次您尝试通过 m2e 插件更新项目配置时,您都会再次看到嵌套异常消息。

如果你真的想要这种设置,你需要相应地配置构建路径(右键单击项目 - 构建路径 - 配置构建路径)。

【讨论】:

  • 我从不弄乱 Eclipse 中的类路径或编辑文件。这个设置不冲突吗?我的意思是第一个类路径会将测试用例拉入我的目标文件夹。这意味着我真的想把源代码放在 main/java 中。
  • 我不是说您应该编辑文件,我是说无论您使用什么 maven 集成(eclipse:eclipse 或 m2e),这就是您的 src / test 文件夹的样子。
【解决方案3】:

尝试在您的项目中添加一个新文件夹test/java,并将其配置为Project &gt; Properties &gt; Java Build Path 中的源文件夹。查看Source 标签。

你的目录布局应该是:

project/
-> src/
-> test/

使用.test 作为测试包的后缀可能不是必需的,并且在x.y.z.MyClassTest 中测试x.y.z.MyClass 时会为您节省导入语句。

【讨论】:

    【解决方案4】:

    这正是我所做的。

    • 创建新的源目录:src/test/javasrc/main/java
    • 获取我当前所有的 com.xxx.xxx.trackar* 包,全选,右键单击Refactor &gt; Move,然后我将它们移动到src/main/java
    • 使用不带 .test 后缀的包名在 src/test/java 中创建我的新 junit 测试。
    • 编辑 pom.xml 以符合新的源目录。
    • 右键项目Maven &gt; update Project
    • Project &gt; Properties &gt; Java Build Path 参见Source 选项卡。确保src/test/javasrc/main/java 存在,src 不存在。如果不正确,请返回并再次更新 pom.xml(并查看有效 pom)...
    • 关闭并再次打开 Eclipse。
    • 包名错误消失了!!!!!!耶!

    感谢大家的帮助。 PS:我丢失了版本控制历史,但这是因为我使用的是旧系统。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 2015-05-20
      • 2015-12-08
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      相关资源
      最近更新 更多