无法将 Intellij 与生成的源文件夹一起使用

Posted

技术标签:

【中文标题】无法将 Intellij 与生成的源文件夹一起使用【英文标题】:Unable to use Intellij with a generated sources folder 【发布时间】: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 添加到类路径中?

【问题讨论】:

看看***.com/questions/10735380/… 试试这个解决方案,它可能会解决您的问题。 click here for the solution 试试这个解决方案,它可能会解决您的问题。 click here for the solution 【参考方案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 应用程序)的解决方案是:

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

然后,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' 被添加到类路径中(目录是蓝色的(它是红色的),我们在左侧看到一个星号 ('*')。

【讨论】:

以上是关于无法将 Intellij 与生成的源文件夹一起使用的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ IDEA classpath包含哪些文件夹以及如何把文件(夹)添加到classpath下

IntelliJ IDEA classpath包含哪些文件夹以及如何把文件(夹)添加到classpath下

如何将 gradle 生成的源文件夹添加到 Eclipse 项目?

如何将 IntelliJ 与 Play Framework 和 Scala 一起使用

IntelliJ IDEA 中的 Drools 支持

将 Intellij 与 SBT 一起使用时如何更改提供的依赖项?