筛选特定库的gradle配置

时间:2016-12-22 08:06:09

标签: java gradle jar configuration build.gradle

我目前正要将我的项目的构建系统从ANT迁移到gradle。所以我很擅长gradle我的项目功能是一个动态加载在XML文件中配置的jar的插件机制。每个插件都在自己的子项目中。 XML配置的条目如下所示

<?xml version="1.0" encoding="UTF-8"?>
<implementation ...>
    <repository>text</repository>
    <classpath>library1.jar</classpath>
    <classpath>library2.jar</classpath>
    ...
</implementation>

我添加了一个XSL转换,为每个条目添加前缀,并在构建文件夹中使用正确的lib文件夹,以使其可用于我的主项目的运行任务。

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

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

dependencies {
    compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.1.0'
    ...
    compile project(':main')
}

task copyReferencedLibraries(type: Copy) {
    into "$buildDir/libs"
    from configurations.compile
}

jar {
    dependsOn xslt
    dependsOn copyReferencedLibraries
    ...
}

但是,这会将所有库(包括从主项目继承的库)复制到lib文件夹。比实际需要更多。

如何将库过滤到本子项目中定义的库,或者至少手动过滤我想要复制的库?

1 个答案:

答案 0 :(得分:0)

您只需过滤Copy任务

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

参考:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Copy.html

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