Java 特定库的筛选器渐变配置

Java 特定库的筛选器渐变配置,java,gradle,jar,configuration,build.gradle,Java,Gradle,Jar,Configuration,Build.gradle,我目前正准备将我的项目的构建系统从ANT迁移到gradle。所以我对gradle是个新手,我的项目有一个插件机制,可以动态加载XML文件中配置的JAR。每个插件都在自己的子项目中。XML配置的条目如下所示 文本 library1.jar library2.jar ... 我添加了一个XSL转换,在build文件夹中为每个条目添加正确的lib文件夹前缀,以使其在主项目的运行任务中可用 这对于在我的项目中创建的库已经可以正常工作了。然而,其中一些依赖于第三方库,例如protobuf 现在,我通过

我目前正准备将我的项目的构建系统从ANT迁移到gradle。所以我对gradle是个新手,我的项目有一个插件机制,可以动态加载XML文件中配置的JAR。每个插件都在自己的子项目中。XML配置的条目如下所示


文本
library1.jar
library2.jar
...
我添加了一个XSL转换,在build文件夹中为每个条目添加正确的lib文件夹前缀,以使其在主项目的运行任务中可用

这对于在我的项目中创建的库已经可以正常工作了。然而,其中一些依赖于第三方库,例如protobuf

现在,我通过将所有引用的jar复制到lib文件夹来解决这个问题。我的build.gradle如下所示

依赖项{
编译组:'com.google.protobuf',名称:'protobufjava',版本:'3.1.0'
...
编译项目(“:main”)
}
任务copyReferencedLibraries(类型:Copy){
进入“$buildDir/libs”
从configurations.compile
}
罐子{
德彭森xslt
dependsOn copyReferencedLibraries
...
}
但是,这会将所有库(包括从主项目继承的库)复制到lib文件夹。比我实际需要的还要多


如何将库筛选到此子项目中定义的库,或者至少手动筛选要复制的库?

您可以在
复制任务中进行筛选

task copyReferencedLibraries(type: Copy) {
    into "$buildDir/libs"
    from(configurations.compile) {
        exclude 'some.jar', 'some-other.jar'
        include 'some-required.jar', 'some-other-required.jar'
    }
}
参考:

请注意不要排除第二层或第三层依赖关系(即您使用的jar所需的jar)。如果您这样做了,那么您将不会得到编译错误,当执行触及缺少的依赖项的代码时,您将得到运行时错误