使用java.lang.ClassNotFoundException进行JUnit测试失败:在Tycho环境中使用com.mysql.jdbc.Driver

时间:2013-04-22 23:23:02

标签: eclipse jdbc junit classnotfoundexception tycho

我有一个非常奇怪的情况。我有一组eclipse插件项目,我使用tycho和maven来构建它们。我在其中一个项目中使用了JDBC驱动程序,我有一个测试插件来测试这个项目。由于com.mysql.jdbc插件在eclipse p2存储库中不可用(我们没有自己的p2),我导入了jdbc插件并创建了一个OSGi插件并将依赖项添加到我的本地插件中。

我有多个eclipse工作区坐起来。只有在创建测试和jdbc插件的第一个工作区中,当我使用eclipse run as - >运行它们时,junit测试才有效。 Junit测试命令。当其他人甚至我签出源代码并尝试在不同的工作区中运行测试时,会抛出此异常:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

我也尝试过使用tycho集成测试(运行mvn集成测试),但这两种方法都不起作用,我仍然得到相同的异常。我试着搜索了很多,但我找不到答案。

更新:我认为这不是一个tycho问题。我刚刚尝试基于com.jdbc.mysql jar创建eclipse插件。我创建它的工作区工作正常。但是一旦我提交代码并在另一个工作区中导入项目,测试就会停止工作。两个工作区中的所有设置都相同,一个工作,另一个获取ClassNotFound异常!

2 个答案:

答案 0 :(得分:0)

Tycho根据测试包的传递依赖性计算OSGi运行时。 您可能对mysql驱动程序包没有设计时依赖性(但仅限于它实现的JDBC接口)

尝试在mysql jdbc驱动程序包上添加测试运行时依赖项。 有关如何执行此操作,请参阅http://wiki.eclipse.org/Tycho/FAQ#How_to_add_a_undeclared_dependency.3F__.28e.g..2C_OSGi_declarative_service.29

答案 1 :(得分:0)

OSGi运行时中的

ClassNotFoundException表示OSGi清单中的导入和/或导出声明中存在错误。最常见的情况是bundle声称导出某个包,但实际上并没有该包的二进制文件/类文件。

在Tycho构建中,如果您在.的{​​{1}}属性中没有条目bin.includes,则很容易发生这种情况。