什么是 Grails Build Config Transitive = false
What is Grails Build Config Transitive = false
我注意到在我们的构建配置中,插件中有一个 transitive = false
这是什么意思?执行 excludes
即
时有什么区别
excludes 'code-coverage', 'maven-publisher', 'codenarc'
您可以在 earlier documentation 中找到解释:
Disabling transitive dependency resolution
By default, Grails will not only get the JARs and plugins that you
declare, but it will also get their transitive dependencies. This is
usually what you want, but there are occasions where you want a
dependency without all its baggage. In such cases, you can disable
transitive dependency resolution on a case-by-case basis:
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
Excluding specific transitive dependencies
A far more common scenario is where you want the transitive
dependencies, but some of them cause issues with your own dependencies
or are unnecessary. For example, many Apache projects have
'commons-logging' as a transitive dependency, but it shouldn't be
included in a Grails project (we use SLF4J). That's where the excludes
option comes in:
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' ])
As you can see, you can either exclude dependencies by their artifact
ID (also known as a module name) or any combination of group and
artifact IDs (if you use the Map notation). You may also come across
exclude as well, but that can only accept a single string or Map:
runtime('com.mysql:mysql-connector-java:5.1.16',
'net.sf.ehcache:ehcache:1.6.1') {
exclude "xml-apis"
}
我注意到在我们的构建配置中,插件中有一个 transitive = false
这是什么意思?执行 excludes
即
excludes 'code-coverage', 'maven-publisher', 'codenarc'
您可以在 earlier documentation 中找到解释:
Disabling transitive dependency resolution
By default, Grails will not only get the JARs and plugins that you declare, but it will also get their transitive dependencies. This is usually what you want, but there are occasions where you want a dependency without all its baggage. In such cases, you can disable transitive dependency resolution on a case-by-case basis:
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
Excluding specific transitive dependencies
A far more common scenario is where you want the transitive dependencies, but some of them cause issues with your own dependencies or are unnecessary. For example, many Apache projects have 'commons-logging' as a transitive dependency, but it shouldn't be included in a Grails project (we use SLF4J). That's where the excludes option comes in:
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' ])
As you can see, you can either exclude dependencies by their artifact ID (also known as a module name) or any combination of group and artifact IDs (if you use the Map notation). You may also come across exclude as well, but that can only accept a single string or Map:
runtime('com.mysql:mysql-connector-java:5.1.16', 'net.sf.ehcache:ehcache:1.6.1') { exclude "xml-apis" }