3

我在构建中设置了一个额外的 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 对象文档,我认为唯一的其他方法是使用eclipse.classpath.file.withXml,但它接缝太乱,无法编辑原始 xml。

还有其他更优雅的解决方案吗?

4

3 回答 3

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
}
于 2015-02-12T13:22:45.380 回答
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

希望这可以帮助

于 2012-11-30T14:01:49.727 回答
0

如果 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) }
            }
        }
    }
}
于 2016-06-22T14:36:37.027 回答