我注意到在我们的构建配置transitive = false
中,插件中有一个这是什么意思?做excludes
ie有什么区别
excludes 'code-coverage', 'maven-publisher', 'codenarc'
我注意到在我们的构建配置transitive = false
中,插件中有一个这是什么意思?做excludes
ie有什么区别
excludes 'code-coverage', 'maven-publisher', 'codenarc'
您可以在早期文档中找到解释:
禁用传递依赖解析
默认情况下,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" }