我有一个在 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
添加到类路径?
您可以更改项目结构以将该文件夹添加为“源”目录。
项目结构 → 模块 → 单击 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>
我正在使用 Maven(SpringBoot 应用程序)解决方案是:
右键单击项目文件夹 选择 Maven 选择 Generate Sources And Update Folders
然后,Intellij 会自动将生成的源导入到项目中。
使用 gradle,每当您刷新 gradle 设置时,项目设置都会被清除。相反,您需要在 build.gradle 中添加以下行(或类似行),我使用的是 kotlin,所以:
sourceSets {
main {
java {
srcDir "${buildDir.absolutePath}/generated/source/kapt/main"
}
}
}
gradle idea
都有效。谢谢! :)
annotationProcessor
时才有效。
修复
转到 Project Structure - Modules - Source Folders 并找到 target/generated-sources/antlr4/com/mycompany
- 点击 Edit properties 并设置 < em>包前缀到 com.mycompany
。
这正是我们可以在源目录上设置包前缀的原因。
不同但相关的问题here
src/main/antlr4/<path-to-package>/
中,它就会出现在 target/generated-sources/antlr4/<path-to-package>
中。 IntelliJ 自动将正确的目录标记为源根目录,并且不需要包前缀。我怀疑当人们将语法直接放在 src/main/antlr4
中时需要此修复程序,出于某种原因通常建议这样做。
https://i.stack.imgur.com/VPNmP.png
写那个插件的人搞砸了。这不是这样做的方法!
任何解决方法都将是一个巨大的黑客攻击,让插件开发人员意识到他的错误。
对不起,这是唯一要做的事情。
好的,这是一个 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>
任务。
但是如果插件将文件夹添加为源文件夹,那么你就完蛋了。
target/generated-sources/my-tool
。
对于仍在努力修复 IntelliJ 未拾取的生成源的人,
一个原因可能是生成的文件太大而无法加载,那么您需要将以下行放入“自定义 IntelliJ IDEA 属性”(在菜单帮助下)
idea.max.intellisense.filesize=7500
我运行 mvn generate-resources 然后将 /target/generated-resources 文件夹标记为“源”(项目结构 -> 项目设置 -> 模块 -> 选择 /target/generated-resources -> 单击蓝色的“源”图标。
也许您可以在移动文件夹的 generate-sources 阶段添加一个步骤?
几个月前在导入我的项目时,我遇到了与 Eclipse 相同的问题。现在我对 IntelliJ 也有同样的看法。以下是有人帮助我在 IntelliJ 中解决此问题的方法:
https://i.stack.imgur.com/enQqf.png
它非常简单:
只需右键单击该目录并将其标记为生成的源根目录。请参见下面的截图。
https://i.stack.imgur.com/8DZob.png
经过多次尝试,唯一的工作条件是从根项目文件夹中删除隐藏的 .idea 文件夹并从 Intellij 重新导入
我想更新 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>
我想问,有时即使 pom 是正确的,Intellij 也看不到目录。解决此问题的一种方法是关闭项目,删除 .idea 目录并重新打开项目。 'generated-sources' 被添加到类路径中(目录是蓝色的(它是红色的),我们在左侧看到一个星号('*')。
https://i.stack.imgur.com/axrOc.png
mvn idea:idea
解决了我的问题。为记录。