【问题标题】:Unable to use Intellij with a generated sources folder无法将 Intellij 与生成的源文件夹一起使用
【发布时间】:2011-07-07 10:29:30
【问题描述】:

相关问题 How to configure IntelliJ IDEA and/or Maven to automatically add directories with Java source code generated using jaxb2-maven-plugin?

我有一个自定义插件,可以在target/generated-sources 下生成源代码(注意这里没有工具名)。所以我得到了target/generated-sources/com/mycompany...等来源。

这种格式根本无法更改,因此我可以将 Intellij 配置为将其添加为源文件夹。截至目前,我可以看到 Intellij 已将 target/generated-sources/com 添加为源文件夹。

请注意,我没有配置插件的选项!

更新 1:我不同意我必须将生成的源代码放在工具名称文件夹下这一事实。这可能是一个很好的约定,但如果我只有一个生成器,我不需要把它放在那里吗?同样,在我的 pom.xml 中有一个 resources 部分,它清楚地表明 target/generated-sources 应该被视为源文件夹。这在 Eclipse 中工作得非常好,所以我不知道为什么 Intellij 不尊重我的设置。

TL;DR -> 当我将 target/generated-sources 放入 pom.xml 的资源部分时,为什么 Intellij 过分热衷于将 target/generated-sources/com 添加到类路径中?

【问题讨论】:

标签: java maven-2 intellij-idea


【解决方案1】:

编写该插件的人搞砸了。这不是办法!

任何解决方法都将是一个巨大的黑客,让插件开发人员意识到他的错误。

抱歉,这是唯一的办法。


好的,这是一个 hack,在你的插件执行之后,直接使用 antrun 插件将目录移动到其他地方:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
      <execution>
        <phase>process-sources</phase>
        <configuration>
          <target>
            <move todir="${project.build.directory}/generated-sources/toolname/com"
                  overwrite="true">
                <fileset dir="${project.build.directory}/generated-sources/com"/>
            </move>
          </target>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
</plugin>

在此示例中,toolname 应替换为唯一标识创建代码的插件的任何内容,com 代表创建的包的根。如果您有多个包根,您可能需要多个 &lt;move&gt; 任务。

但如果插件将文件夹添加为源文件夹,那你就完蛋了。

【讨论】:

  • 谢谢肖恩。我实际上观察到 Intellij 同时添加了 target/generated-sources/com 和 target/generated-sources(这是在“资源”部分中明确添加为源目录)。有没有其他方法可以防止第一件事发生。如果否,那么我将尝试您的解决方法。
  • 是的,作者应该使用target/generated-sources/my-tool
【解决方案2】:

也许您可以在 generate-sources 阶段添加一个步骤来移动文件夹?

【讨论】:

    【解决方案3】:

    您可以更改项目结构以将该文件夹添加为“源”目录。

    项目结构 → 模块 → 单击 generated-sources 文件夹并将其设为 sources 文件夹。

    或者:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.4</version>
        <executions>
            <execution>
                <id>test</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>add-source</goal>
                </goals>
                <configuration>
                    <sources>
                        <source>${basedir}/target/generated-sources</source>
                    </sources>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    【讨论】:

    • 这个选项听起来很有趣。每次运行“mvn idea:idea”时,我都会丢失此设置。有没有办法用这个“解决方法”声明一个 maven idea 插件?
    • 如果生成的源文件夹在 build 下,则无法添加,因为 IDEA 排除了 build 文件夹。
    • @NBW 你不能手动,是的。但是如果你删除你的模块然后重新导入它,(使用这个插件设置),idea 可以正确识别所有内容。
    • 您也可以右键单击任何文件夹并使用“将目录标记为”
    • 虽然我的 pom.xml 包含这个 sn-p,但 IDEA 没有看到生成的源。运行mvn idea:idea 解决了我的问题。用于记录。
    【解决方案4】:

    修复

    转到项目结构 - 模块 - 源文件夹 并找到target/generated-sources/antlr4/com/mycompany - 点击编辑属性并将包前缀设置为com.mycompany

    这正是我们可以在源目录上设置包前缀的原因。


    不同但相关的问题here

    【讨论】:

    • 这个修复是我在 DAYS 中寻找的唯一一个。谢谢!
    • 哦,谢谢,我刚刚更新了 intellij,他们已经更改了图标。没想到橙色文件夹意味着它不是来源。
    • 找了半天了。用 antlr4 为我工作。谢谢!
    • 对于 ANTLR >=4.5.3(也可能更早),只要我的语法位于src/main/antlr4/&lt;path-to-package&gt;/,那么它就会出现在target/generated-sources/antlr4/&lt;path-to-package&gt;。 IntelliJ 自动将正确的目录标记为源根目录,并且不需要包前缀。我怀疑当人们将他们的语法直接放在 src/main/antlr4 中时需要此修复程序,通常出于某种原因建议这样做。
    【解决方案5】:

    使用 gradle,每当您刷新 gradle 设置时,项目设置都会被清除。相反,您需要在 build.gradle 中添加以下行(或类似行),我使用的是 kotlin,所以:

    sourceSets {
        main {
            java {
                srcDir "${buildDir.absolutePath}/generated/source/kapt/main"
            }
        }
    }
    

    【讨论】:

    • 这对 IntelliJ 的项目导入和 gradle idea 都有效。谢谢! :)
    • 这只有在我的依赖项中不使用annotationProcessor 时才有效。
    【解决方案6】:

    我正在使用 Maven(SpringBoot 应用程序)的解决方案是:

    1. 右键项目文件夹
    2. 选择 Maven
    3. 选择生成源并更新文件夹

    然后,Intellij 会自动将生成的源导入到项目中。

    【讨论】:

    • 工作时不会自己弄乱文件夹结构!
    • 这个答案应该更高——比公认的答案方便得多
    • 注意,在最新版本的Intellij 2019.1中,可以点击maven菜单中的第二个按钮(右侧,展开maven侧边栏,顶部,第二个按钮)
    • 我还必须检查指向错误的非默认 repo 的 maven settings.xml
    • 像魅力一样工作!
    【解决方案7】:

    几个月前我在导入我的项目时遇到了与 Eclipse 相同的问题。现在我对 IntelliJ 也有同样的看法。 以下是有人帮助我在 IntelliJ 中解决此问题的方法:

    菜单 => 视图 => 工具窗口 => Maven 项目 在 spring_user 值 => 运行配置中,选择全新安装。 这应该进行全新安装,之后您应该能够看到这些类

    【讨论】:

      【解决方案8】:

      经过多次尝试,唯一的工作条件是从根项目文件夹中删除隐藏的 .idea 文件夹并从 Intellij 重新导入

      【讨论】:

        【解决方案9】:

        通过删除模块设置中的“排除”来解决它(右键单击项目,“打开模块设置”)。

        【讨论】:

          【解决方案10】:

          我想更新DaShaun之前的评论,但由于这是我第一次评论,应用程序不允许我。

          尽管如此,我正在使用 eclipse,在我按照 Dashun 的建议将下面提到的代码 sn-p 添加到我的 pom.xml 之后,我运行了 mvn clean 包来生成 avro 源文件,但我仍然收到编译错误在工作区中。

          我右键单击 project_name -> maven -> update project 并更新了项目,这将 target/generated-sources 作为源文件夹添加到了我的 eclipse 项目中。

          <plugin>
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>build-helper-maven-plugin</artifactId>
              <version>1.4</version>
              <executions>
                  <execution>
                      <id>test</id>
                      <phase>generate-sources</phase>
                      <goals>
                          <goal>add-source</goal>
                      </goals>
                      <configuration>
                          <sources>
                              <source>${basedir}/target/generated-sources</source>
                          </sources>
                      </configuration>
                  </execution>
              </executions>
          </plugin>
          

          【讨论】:

            【解决方案11】:

            我运行 mvn generate-resources 然后将 /target/generated-resources 文件夹标记为“源”(项目结构 -> 项目设置 -> 模块 -> 选择 /target/generated-resources -> 点击蓝色的“源” " 图标。

            【讨论】:

            • 这不是一种非常持久的方式。
            【解决方案12】:

            对于仍在努力修复未被 IntelliJ 拾取的生成源的人,

            一个原因可能是生成的文件太大而无法加载,那么您需要将以下行放入“自定义 IntelliJ IDEA 属性”(在菜单帮助下)

            idea.max.intellisense.filesize=7500
            

            【讨论】:

              【解决方案13】:

              我想问,有时即使 pom 是正确的,Intellij 也看不到目录。解决此问题的一种方法是关闭项目,删除 .idea 目录并重新打开项目。 'generated-sources' 被添加到类路径中(目录是蓝色的(它是红色的),我们在左侧看到一个星号 ('*')。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2019-02-22
                • 1970-01-01
                • 2014-11-12
                • 2011-11-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多