【问题标题】:Maven suddenly wants src/ instead of src/main/javaMaven 突然想要 src/ 而不是 src/main/java
【发布时间】:2015-12-01 08:13:03
【问题描述】:

我将 Maven 3.3.3 与 Eclipse Mars 和 m2e 一起使用。昨天,我创建了一个新的 Java 项目并将其转换为 Maven 项目。

之后,类路径只包含src,而不是标准的src/main/java。我很惊讶,但我只是创建了丢失的文件夹并运行了 m2e 的“更新项目”。这并没有解决问题; m2e 还是坚持只用src

所以我手动编辑了类路径以得到通常的结果

src/test/java
src/test/resources
src/main/java
src/main/resources

当我现在尝试 m2e 的“更新项目”时,我收到了这个错误:

Cannot nest 'foo/src/test/java' inside 'foo/src'. To enable the nesting, exclude 'test/' from 'foo/src'

sigh接下来我去命令行运行mvn eclipse:eclipse来获取这个类路径:

src/test/java
src/test/resources
src
src/main/resources

现在,我完全被难住了。为什么会这样?

【问题讨论】:

    标签: eclipse maven m2e


    【解决方案1】:

    在 POM 编辑器中打开您的 POM,然后单击“有效 POM”选项卡。搜索sourceDirectory。您可能会看到如下内容:

    <sourceDirectory>src</sourceDirectory>
    

    当您第一次将 Java 项目转换为 Maven 时,m2e 尝试保持类路径相同。默认情况下,Eclipse Java 项目具有不同的布局。他们使用src/ 而不是src/main/java/。没有 test 文件夹,因为 Eclipse 项目通常将它们的测试放到不同的项目中。

    解决问题:

    1. 从 POM 中删除 sourceDirectory 元素(注意:它可能在父 POM 中)。
    2. 前往项目
    3. 选择所有源文件夹
    4. 从构建路径中移除它们(上下文菜单 -> 构建路径 -> 从构建路径中移除)。
    5. 更新项目

    现在错误应该消失了,类路径应该是正确的。

    【讨论】:

    • @turboemu 如果你这样做,那么问题最终会回来。
    • @JohnnyBigoode 因为这个配置选项告诉 Eclipse 源文件夹应该是什么。
    • @AaronDigulla 只是因为我不是棚子里最犀利的工具,pom.xml 实际上会告诉 Eclipse 如何配置构建路径?这实际上非常聪明,它解决了我目前在 Eclipse 中遇到的很多问题。
    • m2e 插件可以读取 POM 文件,并将 Eclipse 配置到其最佳性能。 Maven 和 Eclipse 之间存在一些差异,插件无法模拟这些差异,例如 Maven 有两个类路径(编译和测试),src/test/java 中的代码能够看到 src/main/java 中的代码,但反之则不行。
    • @AaronDigulla 不确定它是如何工作的。我跳过了第 1 步,因为有效 Pom 选项卡下的 xml 不可编辑。
    【解决方案2】:

    您可以创建两种类型的文件夹:1) 包 2) 源文件夹

    1) 一个包看起来像这样

    要创建包,请右键单击所需的文件夹(在我的示例中,我右键单击 Java 资源)--> 新建 --> 包

    应该会出现一个像这样的弹出窗口

    “源文件夹:”这是您选择项目的地方。如果您在那里没有看到任何内容,请单击“浏览...”并找到您的项目。如果我单击“浏览...”,它会显示:

    “名称:”是您为包裹起的名称。

    注意:包应该在源文件夹中。源文件夹是父文件夹。

    2) 源文件夹如下所示:

    要创建源文件夹,请右键单击所需的文件夹(在我的示例中,我右键单击 Java 资源)--> 新建 --> 源文件夹

    在“项目名称:”下写下您的项目名称。如果您需要帮助,请点击“浏览...”

    在“文件夹名称:”下写下您想要的文件夹名称。

    错误:如果您尝试创建“src/main/resources”文件夹并遇到此错误“无法在‘ProjectName’中嵌套‘ProjectName’。启用嵌套排除“main/”

    解决方案:

    【讨论】:

    • 这个对我有用,但我必须先重命名 src 文件夹,然后将其所有内容复制到新创建的 SOURCE FOLDER。
    猜你喜欢
    • 2016-07-18
    • 2011-02-24
    • 1970-01-01
    • 2018-02-07
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多