All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.freefair.gradle.plugins.lombok.tasks.LombokApiJar Maven / Gradle / Ivy

package io.freefair.gradle.plugins.lombok.tasks;

import lombok.AccessLevel;
import lombok.Getter;
import org.gradle.api.NonNullApi;
import org.gradle.api.file.FileSystemOperations;
import org.gradle.api.internal.ProcessOperations;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.TaskAction;

import javax.inject.Inject;
import java.io.File;

/**
 * Creates a small lombok-api.jar with the annotations and other public API
 * classes of all lombok features. This is primarily useful to include in your
 * android projects.
 *
 * @author Lars Grefer
 */
@Getter
@NonNullApi
@CacheableTask
public class LombokApiJar extends LombokJarTask {

    @Getter(AccessLevel.NONE)
    private final FileSystemOperations fileSystemOperations;
    @Getter(AccessLevel.NONE)
    private final ProcessOperations processOperations;

    @Inject
    public LombokApiJar(FileSystemOperations fileSystemOperations, ProcessOperations processOperations) {
        this.fileSystemOperations = fileSystemOperations;
        this.processOperations = processOperations;
        getArchiveAppendix().convention("api");
    }

    @TaskAction
    public void copy() {
        fileSystemOperations.delete(spec -> spec.delete(getArchiveFile()).setFollowSymlinks(false));

        File destinationDir = getDestinationDirectory().getAsFile().get();
        processOperations.javaexec(apiJar -> {
            if (getLauncher().isPresent()) {
                apiJar.setExecutable(getLauncher().get().getExecutablePath().getAsFile().getAbsolutePath());
            }
            apiJar.setClasspath(getLombokClasspath());
            apiJar.getMainClass().set("lombok.launch.Main");
            apiJar.args("publicApi", destinationDir.getAbsolutePath());
        });

        new File(destinationDir, "lombok-api.jar")
                .renameTo(getArchiveFile().get().getAsFile());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy