使Gradle不将源集目录用作Eclipse源文件夹
我的构建中有一个额外的java源代码集,名为使Gradle不将源集目录用作Eclipse源文件夹,eclipse,gradle,Eclipse,Gradle,我的构建中有一个额外的java源代码集,名为gen——就像生成的源代码中有很多编译器警告一样。gradleeclipse任务将此集合的源目录配置为eclipse源文件夹,这会导致许多我不想看到的警告。另一个原因是,生成的源代码不应该被更改——我不希望有人意外地编辑它,认为它是一个常规代码 以下方法有效,但仅当使用gradleeclipse覆盖现有配置时有效 eclipse.classpath.file { whenMerged { classpath -> clas
gen
——就像生成的源代码中有很多编译器警告一样。gradleeclipse
任务将此集合的源目录配置为eclipse源文件夹,这会导致许多我不想看到的警告。另一个原因是,生成的源代码不应该被更改——我不希望有人意外地编辑它,认为它是一个常规代码
以下方法有效,但仅当使用gradleeclipse
覆盖现有配置时有效
eclipse.classpath.file {
whenMerged { classpath ->
classpath.entries.removeAll {
entry -> entry.kind == 'src' && entry.path == 'src/gen/java'
}
}
}
但是,如果配置被清理-gradle-cleanclipse-eclipse
,则它不起作用,这是您第一次在eclipse中导入项目时发生的情况
阅读本文,我认为唯一的其他方法是使用eclipse.classpath.file.withXml
,但它太乱了,无法编辑原始xml
还有其他更优雅的解决方案吗?我通过将“gen”目录添加到主java源集中解决了类似的问题 如下
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
配置{
jaxb
}
依赖关系{
jaxb'com.sun.xml.bind:jaxbxjc:'
}
sourceset.main.java.srcDirs'gen'
任务createGenDirs(){
文件(“gen”).mkdirs()
}
task jaxb我是如何做到这一点的(在我的例子中,源文件夹被合并,只有包不同):
如果Eclipse不知道其他代码正在使用的生成源代码,那么您可能会在Eclipse中遇到编译器错误
但如果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) }
}
}
}
}
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) }
}
}
}
}