Gradle + Eclipse:如何不导出依赖项依赖项的JAR?

时间:2014-02-25 17:09:29

标签: eclipse gradle build gradle-eclipse

在我的build.gradle文件中,我有以下内容:

...
dependencies {
  ...
  testCompile (group: 'org.uncommons', name: 'reportng', version: '1.1.2') { exclude group: 'org.testng', module: 'testng' }
  ...
}
...

reportng需要velocity-1.4.jarvelocity-dep-1.4.jar,实际上上面的testCompile依赖项会导致这两个JAR被提取并被放入Eclipse的.classpath文件,作为“导出”(即,检查Eclipse的“Java Build Path”对话框的“Order and Export”选项卡中的复选框)。

这两个JAR设置为导出的事实是一个问题。我需要它们仍然被取出但不能被导出。

Gradle doc我了解到这是通过使用noExportConfigurations按照他们的示例完成的:

apply plugin: 'java'
apply plugin: 'eclipse'

configurations {
  provided
  someBoringConfig
}

eclipse {

  classpath {

    //if you don't want some classpath entries 'exported' in Eclipse
    noExportConfigurations += configurations.provided
  }
}

我的问题是我没有configurations {}部分,虽然我当然可以添加一部分,但我不知道要放入什么内容以便从导出中排除而不是整个{{1但只有两个随附的JAR。

2 个答案:

答案 0 :(得分:1)

你可能想要这样的东西:

configurations {
    noExport
}
dependencies {
    // replace with correct values
    noExport "foo:velocity:1.4" 
    noExport "foo:velocity-dep:1.4"
}
eclipse {
    classpath {
        noExportConfigurations += configurations.noExport
    }
}

PS:请不要在此处和http://forums.gradle.org双重发帖。

答案 1 :(得分:1)

显然,在Peter's answer之后的一年半中,不推荐使用noExportConfigurations,并计划在Gradle 3.0中将其删除。更重要的是,the linked Gradle forum thread中没有一个解决方案允许我删除从文件夹导入的依赖项,例如war / WEB-INF / lib。

经过大量研究后,我偶然发现了这个build.gradle file in GitHub末尾的一个例子,它重新排序了类路径中的条目:

withXml { xml ->
    def node = xml.asNode()
    node.remove( node.find { it.@path == 'org.eclipse.jst.j2ee.internal.web.container' } )
    node.appendNode( 'classpathentry', [ kind: 'con', path: 'org.eclipse.jst.j2ee.internal.web.container', exported: 'true'])
}

我修改了示例,以便它只使用Groovy Node的正则表达式功能删除JAR文件。请注意,不需要xml ->部分,并且此条目是文件闭包的子项:

withXml {
    def node = it.asNode()
    node.remove( node.find { it.@path ==~ /.*velocity-1\.4\.jar/ } )
    node.remove( node.find { it.@path ==~ /.*velocity-dep-1\.4\.jar/ } )
}