【问题标题】:Generate Sources and Update Folders For All Projects为所有项目生成源和更新文件夹
【发布时间】:2019-02-25 14:51:38
【问题描述】:

有一个 IntelliJ 命令的名称与我的标题完全相同:为所有项目生成源并更新文件夹。那有什么作用?在询问它的作用之前单击它可能犯了一个巨大的错误。它现在运行了半个多小时。不会停下来,我不敢停下来。

我想做的是切换到另一个 GIT 分支,但工作区本身出现问题并导致一些构建错误,所以我想我会点击所有看起来像 recycle icon 的东西。所以我在maven面板上按下了这个:

它有什么特别之处吗?它的工作时间显然比

mvn clean install -DskipTests

我还需要什么?其实到现在我什么都不需要。

ps。 (现在已经完成了,但我仍然很好奇这个功能到底是什么。)

【问题讨论】:

    标签: git maven intellij-idea ide


    【解决方案1】:

    关于生成源的事情是它既是一个 pre-build 任务(以便 IntelliJ 可以访问这些生成的源以进行 linting 等),也是一个 build 任务(因为这些源不在源代码控制中,需要在每次构建时生成)。 所以 IntelliJ 有这个按钮来生成源和更新文件夹,而 Maven 在其默认生命周期中有一个 generate-sources 阶段。他们几乎做同样的事情。

    无论是否生成了源,IntelliJ 都需要知道从哪里导入。你可以在这里设置

    File | Settings | Build, Execution, Deployment | Build Tools | Maven | Importing

    当您构建项目时,Maven 会生成源代码,但 IntelliJ 仍然不知道应该导入它们。这就是为什么按钮有两个动作合二为一的原因。或者,您可以右键单击您的目标/生成源目录并选择“将目录标记为 > 生成的源根目录”。它应该变成蓝色。但是使用按钮更好,因为它将使用在您的源生成插件中配置的任何自定义目录(前提是您的导入配置为“自动检测”)。

    Generate Sources and Update Folders 操作不会出现在 Build OutputEvent log 中,但会在后台任务窗口。如果你想看看它做了什么,请打开我的 ~/.cache/JetBrains/IdeaIE2021.1/log/idea.log 文件的版本。 IntelliJ 似乎直接调用源生成插件(在生命周期之外)。

    请注意这些未解决的问题:

    【讨论】:

      【解决方案2】:

      根据IntelliJ IDEA Maven FAQ

      为了让生成的源自动导入为源 文件夹配置相应的插件,以便将它们放入 target/generated-sources/,其中 subdir 是您的任何文件夹名称 更喜欢。 subdir 文件夹是区分来源所必需的 不同的工具,并排除一些特殊的生成源 (例如 groovy 存根)。

      请注意,即使您手动配置了一些源文件夹 在这个文件夹本身的 target/generated-sources 下,IDEA 将 根据你的 pom.xml 重写它们。

      只要您想生成源代码,您只需执行 相应的目标,为生成绑定(通常是生成源, 生成测试源)。之后,IDEA 将拾取新文件夹并 设置它们。

      Maven docs:

      让我们通过一个简短的示例来尝试和帮助。生成源 您必须首先有一个参与生成源的插件 像 ANTLR4 Maven 插件一样的阶段。

      所以这一切都很好,花花公子,我们有一个想要生成的插件 Antlr4 语法的一些来源,但我们如何使用它。你需要 指定你想在你的 POM 中使用它:如果你然后输入 mvn 编译 Maven 将遍历生命周期并最终命中 generate-sources 阶段,看到你配置了一个插件 想要参与那个阶段并且 ANTLR4 Maven 插件是 使用您给定的配置执行。此外在编译期间 您可以观察到所有生成的代码(来自您的语法文件) 将自动编译,无需补充配置。

      如您所见,Generate Sources 操作会运行 generate-sources Maven 阶段,用于您的 pom.xml 中生成任何源的任何插件。

      【讨论】:

      • 我必须承认,我完全是 Java 和 Maven 的新手。但我是否理解正确,Intellij 在后台调用 mvn compile -f "pom.xml"?我不知道如何在 VS Code 中触发该操作,因为 Maven for Jave-extension 似乎没有提供“生成源”按钮。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多