我正在使用Maven构建一个GWT应用程序来进行依赖项解析,在尝试运行JUnit测试时,我遇到了一个奇怪的问题。我有一个标准的maven式结构的源和测试:
/src/main/java
/src/test/java
如果我设置 Java Build Bath>所有源文件夹的默认输出文件夹为:
/MyProject/target/classes
那时没有问题。但是,GWT插件需要源代码驻留在:
/MyProject/src/main/webapp/WEB-INF/classes
为了能够在开发模式下从这个目录部署,否则就会抱怨。但是,如果我将所有源文件夹的输出目录设置为此目录,则测试将因ClassNotFoundException而失败。
如果我手动将目录/MyProject/src/main/webapp/WEB-INF/classes
添加到JUnit启动程序的类路径中,这可以解决,显然,编译的.class文件丢失了,因此我得到了异常。但是,如果我将目录定义为默认输出目录,为什么eclipse不会自动将目录添加到类路径中?
我怀疑m2eclipse插件会覆盖默认输出文件夹设置,可以吗?因为如果我将/src/main/java
的输出文件夹设置为/target/classes
而将src/test/java
设置为/target/test-classes
,那么一切正常。但是如果在这两个输出目录之外设置任何输出目录,它就不起作用。
我很感激任何想法,谢谢!
答案 0 :(得分:5)
m2eclipse具有在运行单元测试时忽略项目类路径设置的传奇历史。它曾经是(m2eclipse的0.12版本,我认为更早),如果你只是放弃了战斗并将你的项目默认类路径设置为目标/类(对于源代码)和目标/测试类(用于单元测试)代码),一切都会很开心。使用0.13 m2eclipse,这不再有效,因为maven构建器似乎把东西放在target / your-artificat-version-SNAPSHOT / web-inf / classes中。基本上,maven构建的工件的文件夹。这真的很糟糕,因为该路径包含版本号。
m2eclipse让我的耐心耗尽; - )。
提示:要了解单元测试类路径的内容,您可以随时将DEBUG作为单元测试,然后在调试透视图中右键单击该线程并拉出“属性”。这将显示用于单元测试的完整类路径,您可以看到偷偷摸摸的恼人的插件对您的类路径做了什么。