0

我注意到在我们的构建配置transitive = false中,插件中有一个这是什么意思?做excludesie有什么区别

excludes 'code-coverage', 'maven-publisher', 'codenarc'

4

1 回答 1

0

您可以在早期文档中找到解释:

禁用传递依赖解析

默认情况下,Grails 不仅会获取您声明的 JAR 和插件,还会获取它们的传递依赖。这通常是你想要的,但有时你想要一个没有所有包袱的依赖。在这种情况下,您可以根据具体情况禁用传递依赖解析:

runtime('com.mysql:mysql-connector-java:5.1.16',
        'net.sf.ehcache:ehcache:1.6.1') {
    transitive = false
}

// Or
runtime group:'com.mysql',
        name:'mysql-connector-java',
        version:'5.1.16',
        transitive:false

排除特定的传递依赖

一个更常见的场景是您需要传递依赖项,但其中一些会导致您自己的依赖项出现问题或者是不必要的。例如,许多 Apache 项目将“commons-logging”作为传递依赖项,但它不应该包含在 Grails 项目中(我们使用 SLF4J)。这就是 excludes 选项的用武之地:

runtime('com.mysql:mysql-connector-java:5.1.16',
        'net.sf.ehcache:ehcache:1.6.1') {
    excludes "xml-apis", "commons-logging"
}

// Or
runtime(group:'com.mysql', name:'mysql-connector-java', version:'5.1.16') {
    excludes([ group: 'xml-apis', name: 'xml-apis'],
             [ group: 'org.apache.httpcomponents' ],
             [ name: 'commons-logging' ])

如您所见,您可以通过工件 ID(也称为模块名称)或组和工件 ID 的任意组合(如果使用 Map 表示法)排除依赖项。您也可能会遇到 exclude,但它只能接受单个字符串或 Map:

runtime('com.mysql:mysql-connector-java:5.1.16',
        'net.sf.ehcache:ehcache:1.6.1') {
    exclude "xml-apis"
}
于 2016-03-09T09:00:37.683 回答