15

私はgradleを初めて使用しますが、すぐに学習します。リリースタスクで、ログバックから新しいディレクトリに特定の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ディレクトリにドロップするにはどうすればよいですか?

4

2 に答える 2

21

構成は単なる(怠惰な)コレクションです。それらを繰り返し処理したり、フィルタリングしたりすることができます。通常、これはビルドの実行フェーズでのみ実行し、構成フェーズでは実行しないことに注意してください。以下のコードは、遅延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) }
}
于 2012-07-02T16:52:37.110 に答える
9

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を取ります。httpsDependency://gradle.org/docs/current/javadoc/org/gradle/api/artifacts/Dependency.htmlを参照してください。

于 2015-02-07T10:15:08.617 に答える