【问题标题】:When and how does m2e use the Maven test scope to include test dependencies in Eclipse Run Configurations?m2e 何时以及如何使用 Maven 测试范围在 Eclipse 运行配置中包含测试依赖项?
【发布时间】: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


【解决方案1】:

引用https://bugs.eclipse.org/bugs/show_bug.cgi?id=410228:

这是 m2e 如何决定 java 应用程序启动是否应该使用测试或运行时工件范围。

  • “run as junit test”和“run as testng test”使用测试范围。
  • “run as java application”如果应用程序主类位于 src/test/java 下,则使用测试范围,否则使用运行时范围。

这意味着您可以使用主类的位置来控制行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2015-07-18
    相关资源
    最近更新 更多