【问题标题】:filter gradle configuration for specific libraries过滤特定库的 gradle 配置
【发布时间】:2023-03-05 05:39:01
【问题描述】:

我目前正准备将我的项目的构建系统从 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 文件夹。比我实际需要的多。

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

【问题讨论】:

    标签: java gradle jar configuration build.gradle


    【解决方案1】:

    您可以只过滤您的 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)。如果你这样做了,那么你将不会得到编译错误,当执行涉及丢失依赖的代码时,你会得到运行时错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-17
      • 2017-07-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多