无法将 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
代表创建的包的根。如果您有多个包根,您可能需要多个 <move>
任务。
但如果插件将文件夹添加为源文件夹,那你就完蛋了。
【讨论】:
谢谢肖恩。我实际上观察到 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/<path-to-package>/
,那么它就会出现在target/generated-sources/antlr4/<path-to-package>
。 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 项目?