依赖JAR时是否可以排除类/包?

依赖JAR时是否可以排除类/包?,jar,dependency-management,gradle,Jar,Dependency Management,Gradle,我需要依赖于一个包含整个JUnit3包的JAR文件,但我将JUnit4与我的项目分开绑定。因此,我的测试中断,因为它们是使用JUnit3运行程序执行的,而它们应该使用JUnit4运行程序运行 问题是:我能告诉Gradle在依赖JAR时不要包含JAR中的某些类或整个包吗 更新 它使用建议的zipTree/copy解决方案工作: task processAndroidJar(type: Copy) { from zipTree("$androidHome/platforms/android-8/

我需要依赖于一个包含整个JUnit3包的JAR文件,但我将JUnit4与我的项目分开绑定。因此,我的测试中断,因为它们是使用JUnit3运行程序执行的,而它们应该使用JUnit4运行程序运行

问题是:我能告诉Gradle在依赖JAR时不要包含JAR中的某些类或整个包吗

更新 它使用建议的zipTree/copy解决方案工作:

task processAndroidJar(type: Copy) {
  from zipTree("$androidHome/platforms/android-8/android.jar")
  into "$buildDir/android"
  exclude "junit/**"
}

compileJava.dependsOn processAndroidJar

dependencies {
  compile files("$buildDir/android")
}

工作起来非常漂亮。

您可以尝试将jar文件作为一个
ZipTree

ZipTree
允许您在依赖项中包含/排除存档中的不同路径

酷,有具体的例子吗?Gradle用户指南仅非常简短地提到ZipTree;我如何使用它来生成修改后的JAR依赖项?我用zipTree方法更新了我的问题,但现在它不再编译了。想法?这种方法有一个很大的缺点。如果您只是编译filtere,您将只向类路径添加一堆*.class文件。不幸的是,您必须将所有这些文件复制到一个单独的临时目录,并将该目录添加到类路径。不幸的是,将类文件树作为依赖项传递是不起作用的。我认为,这是不可能的。原因如下:依赖项中的文件被合并到类路径中,传递给底层的
javac
执行。将一堆单独的*.class文件添加到编译器的类路径中不会起作用。相反,您应该添加解包文件的根目录。还有两个问题:无法从
ZipFileTree
实例获取解包tmp目录的根目录,并且
ZipFileTree
是惰性的。将zipTree内容复制到新目录并将其添加到dependecy可以解决这个问题。对不起,我现在不能亲自检查。