2014-02-25 70 views
1

在我build.gradle文件我有以下几点:Gradle + Eclipse:如何不导出依赖关系的JAR?

... 
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依赖导致这些两瓶加以取出,并放置到Eclipse的.classpath文件,如“出口“(即,在Eclipse的”Java Build Path“对话框的”Order and Export“选项卡中的复选框被选中)。

这2个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 {}部分,而我可以肯定会增加一个,我不知道该把什么放在里面,以便从出口中排除整个reportng,但只有两个随附的JAR。

回答

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

+0

我绝对不知道张贴同样的问题在这里和在摇篮论坛是坏的。我真诚道歉。感谢您的回答,我会尽快尝试。 – SantiBailors

+0

这是[Gradle论坛](http://forums.gradle.org/gradle/topics/gradle_eclipse_how_to_not_export_jars_that_are_dependencies_of_a_dependency) – SantiBailors

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 { [email protected] == 'org.eclipse.jst.j2ee.internal.web.container' }) 
    node.appendNode('classpathentry', [ kind: 'con', path: 'org.eclipse.jst.j2ee.internal.web.container', exported: 'true']) 
} 

我修改这个例子,它简单地使用删除一个JAR文件Groovy节点的正则表达式功能。请注意,不需要xml ->一部分,该条目是文件关闭的孩子:

withXml { 
    def node = it.asNode() 
    node.remove(node.find { [email protected] ==~ /.*velocity-1\.4\.jar/ }) 
    node.remove(node.find { [email protected] ==~ /.*velocity-dep-1\.4\.jar/ }) 
}