# TransformOutputs

API Documentation: | `TransformOutputs`

The outputs of the artifact transform.

The registered output `File`s will appear in the transformed variant in the order they were registered.

### Properties

No properties

### Methods

Method | Description
`dir(path)` | Registers an output directory.
`file(path)` | Registers an output file.

### Script blocks

No script blocks

### Method details

#### `File` `dir`(`Object` path)

Registers an output directory.

For an absolute path, the location is registered as an output directory of the `TransformAction`. The path must to point to the `InputArtifact`, or point inside the input artifact if it is a directory. Example:

    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"));
        }
    }

For a relative path, Gradle creates an output directory into which the `TransformAction` must place its output files. Example:

    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");
        }
    }

Note: it is an error if the registered directory does not exist when the `TransformAction.transform(org.gradle.api.artifacts.transform.TransformOutputs)` method finishes.

#### `File` `file`(`Object` path)

Registers an output file.

For an absolute path, the location is registered as an output file of the `TransformAction`. The path is required to point to the `InputArtifact` or be inside it if the input artifact is a directory. Example:

    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"));
            }
        }
    }

For a relative path, a location for the output file is provided by Gradle, so that the `TransformAction` can produce its outputs at that location. The parent directory of the provided location is created automatically when calling the method. Example:

    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");
        }
    }

The registered file needs to exist when the `TransformAction.transform(org.gradle.api.artifacts.transform.TransformOutputs)` method finishes.