Eclipse中的Junit包命名冲突(Maven)

时间:2013-02-08 21:11:11

标签: java eclipse maven junit

我想在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插件。

4 个答案:

答案 0 :(得分:3)

您的Structure和类路径有问题。使用描述的布局,文件夹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

答案 1 :(得分:2)

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

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

您的eclipse项目资源管理器应如下所示:

enter image description here

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

更新:

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

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

答案 2 :(得分:1)

尝试将新文件夹test/java添加到项目中,并将其配置为Project > Properties > Java Build Path中的源文件夹。查看Source标签。

您的目录布局应为:

project/
-> src/
-> test/

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

答案 3 :(得分:0)

这正是我所做的。

  • 创建新的源目录:src/test/javasrc/main/java
  • 获取所有当前的com.xxx.xxx.trackar *软件包,选择全部,右键单击Refactor > Move,然后将其移至src/main/java
  • 使用包含.test后缀的软件包名称在src/test/java创建新的junit测试。
  • 编辑pom.xml以符合新的源目录。
  • 右键单击项目Maven > update Project
  • Project > Properties > Java Build Path请参阅Source标签。确保src/test/javasrc/main/java在那里,src不在那里。如果不正确,请返回并再次更新pom.xml(并查看有效的pom)...
  • 再次关闭并打开日食。
  • 包名错误消失!!!!!!耶!

谢谢大家的帮助。 PS:我丢失了修订控制历史记录,但这是因为我使用的是遗留系统。