ChatGPT解决这个技术问题 Extra ChatGPT

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

相关问题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 添加到类路径?

试试这个解决方案,它可能会解决您的问题。 click here for the solution
试试这个解决方案,它可能会解决您的问题。 click here for the solution

g
gvlasov

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

项目结构 → 模块 → 单击 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 包含这个片段,但 IDEA 没有看到生成的源代码。运行 mvn idea:idea 解决了我的问题。为记录。
M
Mehmet Hanoğlu

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

右键单击项目文件夹 选择 Maven 选择 Generate Sources And Update Folders

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


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

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

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

这对 IntelliJ 的项目导入和 gradle idea 都有效。谢谢! :)
这仅在我的依赖项中不使用 annotationProcessor 时才有效。
C
Community

修复

转到 Project Structure - Modules - Source Folders 并找到 target/generated-sources/antlr4/com/mycompany - 点击 Edit properties 并设置 < em>包前缀到 com.mycompany

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

不同但相关的问题here


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

https://i.stack.imgur.com/VPNmP.png


S
Sean Patrick Floyd

写那个插件的人搞砸了。这不是这样做的方法!

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

对不起,这是唯一要做的事情。

好的,这是一个 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 (这在“资源”部分中明确添加为源目录)。有没有其他方法可以防止第一件事发生。如果否,那么我将尝试您的解决方法。
是的,作者应该使用 target/generated-sources/my-tool
S
SebastianX

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

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

idea.max.intellisense.filesize=7500

P
Preeti Joshi

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


这不是一种非常持久的方式。
C
Christoffer Hammarström

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


佚名

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

https://i.stack.imgur.com/enQqf.png


D
Devender Goyal

它非常简单:

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

https://i.stack.imgur.com/8DZob.png


J
Jonathan

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


a
anupam

我想更新 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>

R
Rudy Vissers

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


a
ahmetyavuzoruc

https://i.stack.imgur.com/axrOc.png