我将intellij(2019.1.1)用于java gradle(5.4.1)项目,并将lombok(1.18.6)用于自动生成代码。Intellij将生成的源代码置于“输出/生产/类/生成/”下
和gradle将它们放在构建/生成/源代码/
这很好,我喜欢intellij将自己的构建构件与gradles分开,但是,intellij在运行项目时似乎会查看两个目录,并且会抱怨生成的类重复。将intellij与gradle和自动生成的源一起使用的最佳实践是什么?你…吗:
告诉intellij输出到与gradle相同的目录(如果intellij之外的进程更新build/下的文件,这可能会导致奇怪的行为)
- 告诉intellij使用gradle执行所有任务(我听说这比intellij的make慢)
- 告诉intellij简单地忽略'build'目录(你是怎么做到的?为什么intellij甚至关心'build/',当它知道它输出到'out/'时)
更新:为了澄清这种情况,问题不在于龙目岛自动生成的代码,而在于hibernate jpamodelgen。问题仍然是一样的(重复生成的源代码),但我想澄清的是,这是由jpamodelgen生成的源代码,而不是lombok生成的源代码。
更新2:我尝试了以下配置,试图告诉intellij生成的源所在的位置,并告诉intellij忽略构建目录。遗憾的是,这并没有起作用(在生成的源文件上仍然会出现重复的类错误)。
apply plugin: 'idea'
idea {
module {
sourceDirs += file('out/production/classes/generated')
generatedSourceDirs += file('out/production/classes/generated')
excludeDirs += file('build')
}
}
更新3:尝试了M. Riccuiti的建议并删除了build/、out/、. ide/、. gradle/并重新导入了gradle项目,但intellij仍然在build/目录中看到生成的源。
您可以输入IntelliJ设置(首选项):
首选项|构建、执行、部署|构建工具|Gradle|Runner
然后选中复选框将IDE生成/运行操作委托给Gradle
最后,您将再次进行清理和构建。这些问题将得到解决。
我在之前的评论中提出的解决方案在IDEA 2018.3中运行良好。但是升级到IDEA 2019.1后,我再次遇到了这个重复类异常。。。
下面是使用Gradle 5实现此功能的有效解决方案。x(用5.4测试)和IDEA 2019.1,以实现您的解决方案#3,我认为这是最好的选择(不要混合gradle
关键点是使用idea.module
扩展中的排除性
属性,使IDEA忽略由Gradle在构建/生成/源/...
下管理的生成源
ext {
// path to Gradle generated main sources directory
gradleGeneratedMainSourcesDir = "$buildDir/generated/sources/annotationProcessor/java/main/"
// path to Gradle generated test sources directory
gradleGeneratedTestSourcesDir = "$buildDir/generated/sources/annotationProcessor/java/test/"
// path to IDEA generated sources directory
ideaGeneratedSourcesDir = "$projectDir/out/production/classes/generated"
}
idea {
module {
// exclude main & test sources generated by Gradle from project source directories
excludeDirs += file(gradleGeneratedMainSourcesDir)
excludeDirs += file(gradleGeneratedTestSourcesDir)
// include generated sources directory managed by IDEA
sourceDirs += file(ideaGeneratedSourcesDir)
generatedSourceDirs += file(ideaGeneratedSourcesDir)
}
}
请参见此处基于此配置的完整示例项目:https://github.com/mricciuti/sample-springboot-gradle-idea
这是一种最终对我有效的方法。诀窍在于,当gradle生成类时,它会将它们放入:
build\generated\sources\annotationProcessor\java\main\com...
但是intellij将生产源目录设置为“生成”,在这种情况下,源转到:
build\generated\sources\annotationProcessor\java\main\generated\com...
如果您先用gradle编译,然后使用idea,那么您会得到这两个版本,这会导致问题!
要解决此问题,请将intellij annotation processors“production sources directory”和“test sources directory”配置中的“generated”和“generated\u test”替换为“/”,这将使gradle和intellij在同一目录中生成源,并根据需要相互覆盖。还要确保将“存储生成的源相对于”设置为“模块内容根”,并重建应用程序以清除任何其他源。
我正在使用openapi生成器Gradle插件从openapi模式生成模型文件。在构建中使用这些设置。gradle脚本一切似乎都正常: } 结果类在正确的包中生成: 问题就在这里——我不需要它们在我的源代码中,我只需要它们在编译阶段。我希望它们在构建目录中生成,以将它们与其他逻辑分开。但是,当我将outport-dir更改为"$build dDir/生成". toString()时,会发生这种情况
我正在使用OpenAPI生成器gradle插件和“jaxrs resteasy”生成器,我想知道是否有办法更改输出文件的名称。现在它正在生产ApiApi。java,ApiService。java,ApiException。java等。 有没有办法配置它,这样输出将是MyNameApi.java和MyNameApiService.java? 示例YAML:
我有以下简单的构建。gradle文件: 下面的单个java文件位于: 但是,如果我运行,我会在目录中得到一个jar,它没有主类集。它的清单文件没有条目。为什么会这样?
输出类是只有一个主要功能的简单的类: 发送最终的Web页面到所请求的浏览器。如果您开启缓存功能,他还负责缓存您的网页文件。 输出类虽然很简单,但是它实现的功能却很重要咯: 输出最后的执行结果给发送请示的浏览器. 如果你选择了使用缓存 ,这块也归它管. 注意:输出类的初始化操作是由系统自动完成的,基本上不用你操心. 在一般的情况下你是感觉不到它的存在的(也用不着去关心),对于你来说它就是透明的,不用
输出类是个核心类,它的功能只有一个:发送 Web 页面内容到请求的浏览器。 如果你开启缓存,它也负责 缓存 你的 Web 页面。 注解 这个类由系统自动加载,你无需手工加载。 在一般情况下,你可能根本就不会注意到输出类,因为它无需你的干涉, 对你来说完全是透明的。例如,当你使用 加载器 加载一个视图文件时,它会自动传入到输出类,并在系统执行的最后由 CodeIgniter 自动调用。尽管如此,在你
我为3和2.7安装了selenium python。我运行以下脚本: 1) vi test.py: 我从输出中一无所获。如果我去掉参数,让它保持基本状态: 2) vi new.py: 我安装:snap install chromium sudo apt-get install chromium-browser chromium-chrome driver pip install selenium