我想知道是否有任何方法要排除特定文件,这些文件位于依赖项(不是传递依赖项)中,不会被下载。
我正在将一个构建从Ant + Ivy切换到Gradle,这是在Ivy之前完成的。我问,因为我有一个依赖项,其中包含Artifactory中的许多已编译的wsdl jar,我们正在下载,但我不想下载依赖项中的所有jar。
在常春藤,它的设置如下:
这6个工件发布到Artifactory到一个目录repo / dep.location / example / 7.3 / jar。
<publications>
<artifact name="foo-1-0" type="jar" />
<artifact name="foo-1-0-async" type="jar" />
<artifact name="foo-1-0-xml" type="jar" />
<artifact name="bar-1-0" type="jar" />
<artifact name="bar-1-0-async" type="jar" />
<artifact name="bar-1-0-xml" type="jar" />
</publications>
这就是我只检索六个工件中的两个。
<dependency org="dep.location" name="example" rev="7.3"
conf="compile,runtime">
<include name="foo-1-0-async"/>
<include name="foo-1-0-xml"/>
</dependency>
目前,如果我尝试在Gradle中执行类似操作,则会忽略排除并下载所有六个工件。
compile (group:"dep.location", name:"example", version:"7.3")
{
exclude module:'foo-1-0-xml'
exclude module:'bar-1-0'
exclude module:'bar-1-0-async'
exclude module:'bar-1-0-xml'
}
我正在使用Gradle 1.8版。
答案 0 :(得分:4)
我不认为Gradle有任何内置支持来完成此任务,但您可以自己清除类路径中的工件。
在Gradle论坛上受到this thread的启发,我想出了这个:
// The artifacts we don't want, dependency as key and artifacts as values
def unwantedArtifacts = [
"dep.location:example": [ "foo-1-0-xml", "bar-1-0", "bar-1-0-async", "bar-1-0-xml"],
]
// Collect the files that should be excluded from the classpath
def excludedFiles = configurations.compile.resolvedConfiguration.resolvedArtifacts.findAll {
def moduleId = it.moduleVersion.id
def moduleString = "${moduleId.group}:${moduleId.name}:${moduleId.version}" // Construct the dependecy string
// Get the artifacts (if any) we should remove from this dependency and check if this artifact is in there
it.name in (unwantedArtifacts.find { key, value -> moduleString.startsWith key }?.value)
}*.file
// Remove the files from the classpath
sourceSets {
main {
compileClasspath -= files(excludedFiles)
}
test {
compileClasspath -= files(excludedFiles)
}
}
请注意,Gradle可能仍会下载文件并为您缓存它们,但它们不应该在您的类路径中。
答案 1 :(得分:1)
我不确定这是否是您想要的,但由于我们使用的是Spring Boot和Wildfly,我们必须从spring boot标准包中删除tomcat-starter模块,它看起来非常类似于你的完成。但是,我们的代码声明:
configurations {
compile.exclude module: "spring-boot-starter-tomcat"
}
我没有检查相应的jar是否未下载或者没有在类路径上,我知道它已经不再使用了。
答案 2 :(得分:0)
这个问题向我建议,当我想从我的依赖组之一中排除不需要的 jar 时。是的,有一些方法可以排除依赖项内的特定文件。
implementation (group: 'net.sf.jasperreports', name: 'jasperreports', version: '6.1.0'){
//example : org.olap4j:olap4j:0.9.7.309-JS-3
exclude group: 'org.olap4j', module: 'olap4j'
}