我的构建中有一个额外的java源集,名为gen
- 就像在生成的源中一样,其中包含许多编译器警告。 gradle eclipse
任务将此集的源目录配置为eclipse源文件夹,这导致了许多我不想看到的警告。另一个原因是,生成的源代码不应该被更改 - 我不希望有人偶然编辑它,认为它是一个常规代码。
以下情况有效,但仅限于使用gradle eclipse
覆盖现有配置时。
eclipse.classpath.file {
whenMerged { classpath ->
classpath.entries.removeAll {
entry -> entry.kind == 'src' && entry.path == 'src/gen/java'
}
}
}
但是,如果清除配置它不起作用 - gradle cleanEclipse eclipse
,这是您在eclipse中首次导入项目时会发生的情况。
阅读EclipseClasspath object documentation,我认为唯一的另一种方法是使用eclipse.classpath.file.withXml
,但它的编辑太乱了,无法编辑原始xml。
还有其他更优雅的解决方案吗?
答案 0 :(得分:0)
我通过将'gen'目录添加到主java sourceSet来解决了类似的情况。
如下
configurations {
jaxb
}
dependencies {
jaxb 'com.sun.xml.bind:jaxb-xjc:'
}
sourceSets.main.java.srcDirs 'gen'
task createGenDirs() {
file("gen").mkdirs()
}
task jaxb << {
dependsOn createGenDirs
//generate src into gen directory
}
task cleanGeneratedCode(type: Delete) {
delete file("gen")
clean.dependsOn cleanGeneratedCode
希望这会有所帮助
答案 1 :(得分:0)
以下是我如何实现这一点(在我的情况下,源文件夹已合并,只有包不同):
apply plugin: 'java'
sourceSets {
main {
java {
srcDir 'src/main/java'
exclude 'com/foo/generated/**'
}
}
// This sourceset is ignored by Eclipse
gen {
java {
srcDir 'src/main/java'
include 'com/foo/generated/**'
}
}
}
// Include in a real build from Gradle rather than Eclipse
compileJava {
source sourceSets.gen.java
}
答案 2 :(得分:0)
如果Eclipse不知道其他代码正在使用的生成源,那么您最终可能会在Eclipse中使用编译器 errors 。
但也许如果有一个源目录,gradle用于创建第二个jar,或类似的东西。如果你把那些东西作为一个单独的源集,那么你可以从eclipse中排除它:
sourceSets {
main {
java { srcDir 'src' }
}
gen {
java { srcDir 'src-gen' }
}
}
eclipse {
classpath {
sourceSets -= [sourceSets.gen]
}
}
我的项目文件引用了另一个项目的源代码的情况略有不同,所以我不想在Eclipse中显示任何代码:
sourceSets.main.java { srcDir '../other_project/src' }
eclipse {
classpath {
// remove the source set from the Eclipse classpath
sourceSets -= [sourceSets.main]
}
// Don't let the src dir show up as a linked folder either
project {
file {
withXml {
def res = it.asNode().get('linkedResources')[0]
res.link.findAll{ it.name[0].text() == 'src' }.each{
res.remove(it) }
}
}
}
}