4

Maven から Gradle への移行に取り組んでいます。残念ながら、対処しなければならないいくつかの War オーバーレイがまだ残っています。

回避策として、ある war ファイルの内容を別の war ファイルにコピーしようとしています。

これは私がこれまでに持っているものです:

task overlayWars (dependsOn: war) << {
    // Get the source war files to copy the contents from...
    def dependencyWars = configurations.runtime.filter { it.name.endsWith ('.war') }
    dependencyWars.each { dependentWar ->

        // Get the products, ie the target war file...
        war.outputs.files.each { product ->
            println "Copying $dependentWar contents into $product"
            copy {
                from { zipTree (dependentWar) }
                into { zipTree (product)}   // this seems to be the problem
                include 'WEB-INF/classes/**/*.class'
                include 'WEB-INF/jsp/**/*.jsp'
            }
        }
    }
}

into { zipTree (product)}ファイル(のような)である場合、file ('tmp/whatever')これは正常に機能します。別の zip ファイル (ターゲットの war ファイル) を指定すると、次のエラーで失敗します。

toString() メソッドを使用してクラス org.gradle.api.internal.file.collections.FileTreeAdapter を File に変換することは非推奨となり、Gradle 2.0 で削除される予定です。代わりに、java.io.File、java.lang.String、java.net.URL、または java.net.URI を使用してください。

誰かがこれについて具体的に提案したり、war ファイルを「オーバーレイ」するためのより良い方法を持っている場合は、本当に感謝しています!

4

2 に答える 2

5

いくつかの異なる角度を追跡した後、私はこれに行き着きました:

war {
    configurations.runtime.filter { it.name.endsWith ('.war') }.each {
        from zipTree (it).matching {
            include 'WEB-INF/classes/**/*.class'
            include 'WEB-INF/jsp/**/*.jsp'
            include 'images/**'
        }
    }
}

基本的に、製品の .war 依存関係のフィルタリングされたコンテンツを含めているだけです。標準的な war タスクの変更であるため、依存関係ツリーはクリーンに保たれます。これまでのところうまくいくようです...

于 2013-07-24T22:03:01.480 に答える
1

ここでウォーズをマージしようとしている場合、Copyタスク/メソッドではそれを行うことができません。タスクを使用する必要がありZipます (同等の方法はありません)。既存の戦争にマージしたい場合、これを行う方法はexistingWar.from { zipTree(otherWar) }.

于 2013-07-24T20:38:51.753 に答える