maven提供的依赖将导致intellij中的NoClassDefFoundError?

时间:2015-05-26 08:24:06

标签: maven intellij-idea

IntelliJ 在运行时似乎没有将提供的依赖项放在类路径上,但我可以在 Eclipse 中成功完成此操作。
因为它对我来说更方便,我怎么能在 IntelliJ 中做到这一点?

4 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。 Intellij在类路径中不包含提供的依赖项。见this source。我找到的最佳解决方案是使用exec:java目标将其作为maven app运行。例如:

exec:java -Dexec.classpathScope=compile -Dexec.mainClass=com.splout.db.integration.NShardEnsemble -Dexec.args=4

欢迎更好的解决方案。

答案 1 :(得分:2)

它是否可以通过命令行在Maven中运行?这种行为似乎是对的。 Eclipse过去常常处理类路径,所以我猜它仍然存在。

如果您在Test source root or Source root中运行某些内容会有所不同,因为已提供范围仅适用于编译测试 classpath。

如果您在Test source root中运行测试或主方法,那么它可以使用提供的依赖项,但如果您尝试在{{1}中执行某些操作(通过IntelliJ或exec-maven-plugin)然后它会在ClassNotFoundException上失败。

答案 2 :(得分:0)

这个答案基于@ Meo的回答。

ALT + Enter创建单元测试:

enter image description here

然后运行它:

enter image description here

答案 3 :(得分:0)

IntelliJ现在在运行配置中可以选择Include dependencies with provided scope

enter image description here

任何标记为作用域的库-provided表示该库(顾名思义)应该由JDK或容器(例如tomcat)在运行时提供。