TransformOutputs

產出物轉換的輸出。

已註冊的輸出 File 將會以它們被註冊的順序出現在轉換後的變體中。

屬性

無屬性

方法

方法描述
dir(path)

註冊一個輸出目錄。

file(path)

註冊一個輸出檔案。

腳本區塊

無腳本區塊

方法詳情

File dir(Object path)

註冊一個輸出目錄。

對於絕對路徑,該位置會被註冊為 TransformAction 的輸出目錄。路徑必須指向 InputArtifact,或者如果輸入產出物是目錄,則指向輸入產出物內部。範例

import org.gradle.api.artifacts.transform.TransformParameters;

public abstract class MyTransform implements TransformAction<TransformParameters.None> {
    @InputArtifact
    public abstract Provider<FileSystemLocation> getInputArtifact();
    @Override
    public void transform(TransformOutputs outputs) {
        outputs.dir(getInputArtifact().get().getAsFile());
        outputs.dir(new File(getInputArtifact().get().getAsFile(), "sub-dir"));
    }
}

對於相對路徑,Gradle 會建立一個輸出目錄,TransformAction 必須將其輸出檔案放置於其中。範例

import org.gradle.api.artifacts.transform.TransformParameters;

public abstract class MyTransform implements TransformAction<TransformParameters.None> {
    @Override
    public void transform(TransformOutputs outputs) {
        File myOutput = outputs.dir("my-output");
        Files.write(myOutput.toPath().resolve("file.txt"), "Generated text");
    }
}

注意: 如果在 TransformAction.transform(org.gradle.api.artifacts.transform.TransformOutputs) 方法完成時,已註冊的目錄不存在,則會發生錯誤。

File file(Object path)

註冊一個輸出檔案。

對於絕對路徑,該位置會被註冊為 TransformAction 的輸出檔案。路徑必須指向 InputArtifact,或者如果輸入產出物是目錄,則必須位於其內部。範例

import org.gradle.api.artifacts.transform.TransformParameters;

public abstract class MyTransform implements TransformAction<TransformParameters.None> {
    @InputArtifact
    public abstract Provider<FileSystemLocation> getInputArtifact();
    @Override
    public void transform(TransformOutputs outputs) {
        File input = getInputArtifact().get().getAsFile();
        if (input.isFile()) {
            outputs.file(input);
        } else {
            outputs.file(new File(input, "file-in-input-artifact.txt"));
        }
    }
}

對於相對路徑,Gradle 會提供輸出檔案的位置,以便 TransformAction 可以在該位置產生其輸出。呼叫此方法時,會自動建立所提供位置的父目錄。範例

import org.gradle.api.artifacts.transform.TransformParameters;

public abstract class MyTransform implements TransformAction<TransformParameters.None> {
    @InputArtifact
    public abstract Provider<FileSystemLocation> getInputArtifact();
    @Override
    public void transform(TransformOutputs outputs) {
        File myOutput = outputs.file("my-output.transformed");
        Files.write(myOutput.toPath(), "Generated text");
    }
}

TransformAction.transform(org.gradle.api.artifacts.transform.TransformOutputs) 方法完成時,已註冊的檔案需要存在。