【发布时间】:2016-12-08 03:45:59
【问题描述】:
我花了一段时间才做出这个观察,但我发现 m2e “神奇地”管理了类路径。
示例: 如果我在“src/java/main”源文件夹中作为 Java 应用程序运行,它将排除“测试”范围。注意:该类能够编译,但无法运行。但是,如果我将同一个类移动到“src/java/test”文件夹,那么它就能够编译和运行。
如果我 Run as JUnit Test 则始终包含“测试”范围(即使该类位于“主”源文件夹中)。
我发现这些的唯一方法是在运行时转储 java.class.path 系统属性。
我在http://www.eclipse.org/m2e/documentation/m2e-faq.html找到以下内容
另请注意,用于 JUnit 和 Java 应用程序启动的类路径 启用 Maven 支持的项目的配置也是 特殊计算,排除资源不影响 要么。
当我比较它们的运行配置时,我看不到任何差异,那么我如何才能看到正在执行什么魔法?
有没有办法通过运行配置或任何其他方式覆盖“正常”行为?
【问题讨论】:
-
当我打开 Dependency Hierarchy 时,我能够看到 pom.xml 的所有已解析依赖项(甚至是测试范围)。 m2e 可能会根据您正在运行的内容更改类路径。
-
为什么要更改运行配置?尝试在Maven中修复问题不是更好吗?您的运行时错误是什么?
-
@JFMeier 我的运行时错误是 NoClassDefFoundError 和 ClassNotFoundException。我的 Maven 配置没有任何问题。在我考虑了更多之后,我认为 m2e 应该改进运行配置,以使用户更清楚地看到运行时类路径的内容。现在它只显示“Maven Dependencies”。如果您在包资源管理器中查看“Maven 依赖项”,它似乎包含“测试”范围内的所有 jar(不是 100% 肯定),在我的情况下,它肯定包含运行时缺少的类的 jar .
-
@ravthiru 我已经看到了依赖层次结构,这非常有用。如果运行配置显示将在运行时实际使用的范围,例如“Maven Dependencies [test]”或“Maven Dependencies [compile+runtime]”,也许运行配置会更清楚。显示 jars 和/或链接到依赖层次结构中的正确视图(如果可能)将是一个加号。
标签: eclipse maven m2eclipse m2e