1

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

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

reportng需要velocity-1.4.jarand velocity-dep-1.4.jar,实际上上述testCompile依赖导致这 2 个 JAR 被提取并放入 Eclipse 的.classpath文件中,作为“导出”(即,它们在 Eclipse 的“Java 构建路径”对话框的“订购和导出”选项卡中的复选框被检查)。

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

Gradle 文档中,我了解到这是通过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 {}部分,虽然我当然可以添加一个,但我不知道要在其中放入什么以便从导出中排除,而不是全部reportng,而只是其中的两个 JAR。

4

2 回答 2

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上重复发布。

于 2014-02-26T00:39:02.177 回答
1

显然,自彼得回答以来的一年半时间里, noExportConfigurations 已被弃用,并计划在 Gradle 3.0 中删除。更重要的是,链接的 Gradle 论坛线程中的任何解决方案都不允许我删除从文件夹导入的依赖项,例如 war/WEB-INF/lib。

因此,经过大量研究,我在 GitHub 中这个 build.gradle 文件的末尾偶然发现了一个示例,它重新排序了类路径中的条目:

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 节点的正则表达式功能简单地删除一个 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/ } )
}
于 2015-10-27T06:04:23.817 回答