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

Kan*_*ath 71 java maven-2 intellij-idea

相关问题 如何配置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 - >当我放入target/generated-sources资源部分时pom.xml为什么Intellij过分热衷于添加target/generated-sources/com到类路径?

DaS*_*aun 115

您只需更改项目结构即可将该文件夹添加为"源"目录.

项目结构→模块→单击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>
Run Code Online (Sandbox Code Playgroud)

  • 这个选项听起来很有趣 每次我运行"mvn idea:idea"时,我都会失去这个设置.有没有办法用这个"解决方法"声明一个maven想法插件? (4认同)
  • 虽然我的pom.xml包含此代码段,但IDEA没有看到生成的源代码.运行`mvn idea:idea`解决了我的问题.用于记录. (4认同)
  • 如果生成源文件夹正在构建中,则无法添加它,因为IDEA会排除构建文件夹. (3认同)
  • 您也可以右键单击任何文件夹并使用"标记目录为" (3认同)

Meh*_*ğlu 39

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

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

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

  • 这个答案应该更高 - 比公认的答案更方便 (2认同)
  • 请注意,在最新版本的Intellij 2019.1中,您可以单击maven菜单中的第二个按钮(在右侧,展开maven侧栏,在顶部的第二个按钮) (2认同)

Dev*_*yal 24

它非常简单:

只需右键单击该目录并将其标记为生成的源根目录。请参阅下面的屏幕截图。

在此输入图像描述


zhy*_*ywu 18

使用gradle时,只要刷新平移设置,项目设置就会被清除.相反,你需要在build.gradle中添加以下行(或类似的),我正在使用kotlin:

sourceSets {
    main {
        java {
            srcDir "${buildDir.absolutePath}/generated/source/kapt/main"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Vla*_*čík 15

修复

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

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


这里有不同但相关的问题

  • 这个修复是我几天来寻找的唯一一个对我有用的修复。谢谢! (3认同)
  • 对于ANTLR &gt;=4.5.3(也可能更早),只要我的语法位于`src/main/antlr4/&lt;path-to-package&gt;/`,那么它就会出现在`target/generated-sources /antlr4/&lt;路径到包&gt;`。IntelliJ 自动将正确的目录标记为源根目录,并且不需要包前缀。我怀疑当人们将他们的语法直接放在 `src/main/antlr4` 中时需要这个修复,这通常出于某种原因被推荐。 (2认同)

小智 10

通过删除模块设置中的“排除”解决了这个问题(右键单击项目,“打开模块设置”)。 在此输入图像描述


小智 6

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

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

idea.max.intellisense.filesize=7500
Run Code Online (Sandbox Code Playgroud)


Sea*_*oyd 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>
Run Code Online (Sandbox Code Playgroud)

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

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


归档时间:

查看次数:

85191 次

最近记录:

6 年,7 月 前