17

複数のファイルシステムソースツリーからGradleで少し複雑なZipファイルを作成しようとしていますが、into指定する仕様がいくつあっても、すべて同じものになります。これはGradleで実行できますか?

build/libs/foo.jar --> foo.jar
bar/*              --> bar/*

代わりにこれを取得しています:

build/libs/foo.jar --> bar/foo.jar
bar/*              --> bar/*

これを使用する:

task installZip(type: Zip, dependsOn: jar) {
    from('build/libs/foo.jar').into('.')
    from('bar').into('bar')
}

どんな助けでもいただければ幸いです。

編集:Gradle1.0-マイルストーン-3

4

3 に答える 3

26

これを試して:

task zip(type: Zip) {
    from jar.outputs.files
    from('bar/') {
        into('bar')
    }
}

まず...jarファイルはzipのルート/にある必要があります(これはあなたが望むもののようです)。次に、fromを指定することにより、jarタスクにjar.outputs.files暗黙的なものがあるdependsOnため、これは、目的を達成するための別の方法を示しています。このアプローチを除いて、jar名が時間の経過とともに変化する場合は問題ありません。さらにサポートが必要な場合はお知らせください。

于 2011-05-16T19:44:33.267 に答える
10

どうやら答えへのコメントはより多くのコードを表示する便利な方法を可能にしないでしょう...またはそれは明白ではありません:)私はクライアントのためのプロジェクトを持っています...それで私は完全なプロジェクトを共有することができません/ビルドファイル。これが私が共有できるものです(私はプロジェクト固有のアクロナをXXXに変更しました):

task zip(type:Zip){

    jar.outputs.filesから

    from('scripts /'){
        fileMode = 0755
        '**/runXXX.sh'を含める
        '**/runXXX.bat'を含める
    }
    from('lib /'){
        '**/*。jar'を含める
        into('lib')
    }
    から('。') {
        'xxx.config'を含める
    }

}

これにより、zipのルートにプロジェクトjarを含むzipが作成されます。スクリプトをディレクトリからルートにコピーし、設定ファイルをルートにコピーして、zipのルートに/ libという名前のディレクトリを作成し、すべてのjarファイルをプロジェクト/libからzip/libにコピーします。

于 2011-05-17T19:19:44.853 に答える
0

この答えは質問に直接答えるものではありませんが、これは「Gradleプラグイン」を書く人に役立つと思います

    final Zip zipTask = project.getTasks().create(taskName, Zip.class);
    
    final Action<? super CopySpec> cp1 = (p) -> {
        p.include("**/Install_*.xml", "**/Install.xml").into(WORKING_DIR_1);
    };
    final Action<? super CopySpec> cp2 = (p) -> {
        p.include("*Terminology*.xml").into(WORKING_DIR_2);
    };
    zipTask.from(projectDir + "/Release", cp1);
    zipTask.from(projectDir + "/Release", cp2);
于 2020-07-15T04:34:42.037 に答える