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


87

相关问题 如何配置IntelliJ IDEA和/或Maven以使用jaxb2-maven-plugin生成的Java源代码自动添加目录?

我有一个自定义插件,可以在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->当我将为什么Intellij过度添加到类路径target/generated-sources的资源部分中时?pom.xmltarget/generated-sources/com



尝试此解决方案,它可能会解决您的问题。单击此处获取解决方案
Asad Abdin

尝试此解决方案,它可能会解决您的问题。单击此处获取解决方案
Asad Abdin

Answers:


139

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

项目结构→模块→单击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>

4
这个选项听起来很有趣。每当我运行“ mvn idea:idea”时,我都会丢失此设置。有没有办法用这种“变通方法”声明Maven想法插件?
Kannan Ekanath'3

3
如果生成的源文件夹在构建中,则无法添加它,因为IDEA排除了构建文件夹。
NBW

1
@NBW,您不能手动,是的。但是,如果删除模块,然后重新导入模块(已设置此插件),则idea可以正确识别所有内容。
佐尔坦

3
您也可以右键单击任何文件夹,然后使用“标记目录为”
Pieter De Bie

5
尽管我的pom.xml包含此代码段,但IDEA看不到生成的源。跑步mvn idea:idea解决了我的问题。作记录。
mmdemirbas

76

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

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

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


无需自己弄乱文件夹结构即可工作!
szab.kel

这个答案应该更高-比接受的答案方便得多
stusrob

4
请注意,在最新版本的Intellij 2019.1中,您可以单击maven菜单中的第二个按钮(在右侧,展开maven侧栏,在顶部,第二个按钮)
Roeland Van Heddegem

我还必须检查指向错误的非默认存储库的maven settings.xml
Jonathan

22

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

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

这对于IntelliJ的项目导入和都有效gradle idea。谢谢!:)
克里斯·库珀

是的-最好的提示。乔治很生气!
Hoobajoob

为我工作。我在mapstruct,springframework和componentModel =“ spring”场景中使用了此解决方案
dwilda

16

解决方法

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

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


这里不同但相关的问题


1
此修复程序是DAYS外观中唯一为我工作的修复程序。谢谢!
user1660256 '16

哦,谢谢,我刚刚更新了intellij,他们更改了图标。我没想到橙色文件夹意味着它不是来源。
Pieter De Bie

半天我一直在寻找这个。为我和antlr4合作。谢谢!
皮奥特·坦佩斯

1
对于ANTLR> = 4.5.3(可能也更早),只要我的语法位于中src/main/antlr4/<path-to-package>/,它就会出现在中target/generated-sources/antlr4/<path-to-package>。IntelliJ自动将正确的目录标记为源根目录,并且不需要软件包前缀。当人们将语法直接放在中时src/main/antlr4,我怀疑需要此修复程序,出于某些原因,通常建议这样做。
Alex Reinking

5

谁写的那个插件搞砸了很多时间。那不是这样做的方法!

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

抱歉,这是唯一要做的。


好的,这是一个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代表所创建软件包根目录的任何内容。如果您有多个软件包根,则可能需要执行多个<move>任务。

但是,如果插件将文件夹添加为源文件夹,那么您就搞砸了。


谢谢肖恩。我实际上观察到Intellij既添加了target / generated-sources / com,又添加了target / generated-sources(这是作为“资源”部分中显式添加的源目录)。还有其他方法可以防止第一件事发生。如果否,那么我将尝试您的解决方法。
Kannan Ekanath'3

1
是的,作者应该使用target/generated-sources/my-tool
VlastimilOvčáčík16年


1

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

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


1

通过删除模块设置中的“排除”来解决它(右键单击项目“打开模块设置”)。 在此处输入图片说明


0

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


0

我想更新DaShaun先前发表的评论,但由于这是我第一次发表评论,因此应用程序不允许我这样做。

尽管如此,我正在使用eclipse,并且按照Dashun的建议将以下提到的代码片段添加到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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.