【问题标题】:Extract specific JARs from dependencies从依赖项中提取特定的 JAR
【发布时间】:2015-02-07 18:15:08
【问题描述】:

我是 gradle 新手,但学得很快。我需要从 logback 中获取一些特定的 JAR 到我的发布任务中的新目录中。依赖关系解决得很好,但我不知道如何在发布任务中将 logback-core-1.0.6.jar 和 logback-access-1.0.6.jar 提取到名为“lib/ext”的目录中'。以下是我的 build.gradle 的相关摘录。

dependencies {
    ...
    compile 'org.slf4j:slf4j-api:1.6.4'
    compile 'ch.qos.logback:logback-core:1.0.6'
    compile 'ch.qos.logback:logback-classic:1.0.6'
    runtime 'ch.qos.logback:logback-access:1.0.6'
    ...
}
...
task release(type: Tar, dependsOn: war) {
    extension = "tar.gz"
    classifier = project.classifier
    compression = Compression.GZIP

    into('lib') {
        from configurations.release.files
        from configurations.providedCompile.files
    }

    into('lib/ext') {
        // TODO:  Right here I want to extract just logback-core-1.0.6.jar and logback-access-1.0.6.jar
    }
    ...
}

如何遍历依赖项以找到这些特定文件并将它们放入由 into('lib/ext') 创建的 lib/ext 目录中?

【问题讨论】:

    标签: gradle


    【解决方案1】:

    Configurations 只是(惰性)集合。您可以对它们进行迭代、过滤等。请注意,您通常只想在构建的执行阶段执行此操作,而不是在配置阶段。下面的代码通过使用惰性FileCollection.filter() 方法实现了这一点。另一种方法是将 闭包 传递给 Tar.from() 方法。

    task release(type: Tar, dependsOn: war) {
        ...
        into('lib/ext') {
            from findJar('logback-core') 
            from findJar('logback-access')
        }
    }
    
    def findJar(prefix) { 
        configurations.runtime.filter { it.name.startsWith(prefix) }
    }
    

    【讨论】:

      【解决方案2】:

      接受的答案将Configuration 过滤为FileCollection 毫无价值,因此在集合中您只能访问文件的属性。如果您想过滤依赖项本身(组、名称或版本)而不是缓存中的文件名,那么您可以使用以下内容:

      task copyToLib(type: Copy) {
        from findJarsByGroup(configurations.compile, 'org.apache.avro')
        into "$buildSrc/lib"
      }
      
      def findJarsByGroup(Configuration config, groupName) {
        configurations.compile.files { it.group.equals(groupName) }
      }
      

      files 采用一个dependencySpecClosure,它只是Dependency 上的一个过滤器函数,参见:https://gradle.org/docs/current/javadoc/org/gradle/api/artifacts/Dependency.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-19
        • 2012-10-31
        • 2023-03-25
        • 2013-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-14
        相关资源
        最近更新 更多