added lombok plugin
This commit is contained in:
15
lombok/build.gradle
Normal file
15
lombok/build.gradle
Normal file
@@ -0,0 +1,15 @@
|
||||
plugins {
|
||||
id 'maven-publish'
|
||||
id 'java-gradle-plugin'
|
||||
}
|
||||
|
||||
version = "0.1"
|
||||
|
||||
gradlePlugin {
|
||||
plugins {
|
||||
create("LombokPlugin") {
|
||||
id = "net.woggioni.gradle.lombok"
|
||||
implementationClass = "net.woggioni.gradle.lombok.LombokPlugin"
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,52 @@
|
||||
package net.woggioni.gradle.lombok;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.gradle.api.file.Directory;
|
||||
import org.gradle.api.tasks.JavaExec;
|
||||
import org.gradle.api.tasks.OutputDirectory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
public class Delombok extends JavaExec {
|
||||
|
||||
@Getter
|
||||
@OutputDirectory
|
||||
private final File outputDir;
|
||||
|
||||
private static String buildClasspathString(Iterable<File> classpath) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Iterator<File> it = classpath.iterator();
|
||||
String separator = System.getProperty("path.separator");
|
||||
if(it.hasNext()) {
|
||||
sb.append(it.next().getPath());
|
||||
}
|
||||
while(it.hasNext()) {
|
||||
sb.append(separator);
|
||||
sb.append(it.next().getPath());
|
||||
}
|
||||
for(File file : classpath) {
|
||||
sb.append(file.getPath());
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Inject
|
||||
public Delombok(File lombokJar, File outputDir, Iterable<File> sourceDirs, String classpath) {
|
||||
this.outputDir = outputDir;
|
||||
classpath(lombokJar);
|
||||
List<String> args = new ArrayList<>();
|
||||
args.add("delombok");
|
||||
args.add("-d");
|
||||
args.add(outputDir.getPath());
|
||||
args.add("-c");
|
||||
args.add(classpath);
|
||||
for(File sourceDir : sourceDirs) args.add(sourceDir.getPath());
|
||||
Object[] argsArray = new String[args.size()];
|
||||
args.toArray(argsArray);
|
||||
args(argsArray);
|
||||
}
|
||||
}
|
@@ -0,0 +1,13 @@
|
||||
package net.woggioni.gradle.lombok;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.gradle.api.provider.Property;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@RequiredArgsConstructor(onConstructor_ = { @Inject })
|
||||
public class LombokExtension {
|
||||
@Getter
|
||||
private final Property<String> version;
|
||||
}
|
@@ -0,0 +1,76 @@
|
||||
package net.woggioni.gradle.lombok;
|
||||
|
||||
import org.gradle.api.Plugin;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.Task;
|
||||
import org.gradle.api.artifacts.Configuration;
|
||||
import org.gradle.api.artifacts.dsl.DependencyHandler;
|
||||
import org.gradle.api.model.ObjectFactory;
|
||||
import org.gradle.api.plugins.JavaPlugin;
|
||||
import org.gradle.api.plugins.JavaPluginConvention;
|
||||
import org.gradle.api.provider.Provider;
|
||||
import org.gradle.api.tasks.SourceSet;
|
||||
import org.gradle.api.tasks.SourceSetContainer;
|
||||
import org.gradle.api.tasks.TaskContainer;
|
||||
import org.gradle.api.tasks.javadoc.Javadoc;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Map;
|
||||
|
||||
public class LombokPlugin implements Plugin<Project> {
|
||||
@Override
|
||||
public void apply(Project project) {
|
||||
project.getPluginManager().apply(JavaPlugin.class);
|
||||
ObjectFactory objectFactory = project.getObjects();
|
||||
LombokExtension ext = project.getExtensions()
|
||||
.create("lombok", LombokExtension.class,
|
||||
objectFactory.property(String.class).convention("1.18.20")
|
||||
);
|
||||
JavaPluginConvention javaPluginConvention = project.getConvention().getPlugin(JavaPluginConvention.class);
|
||||
SourceSetContainer sourceSetContainer = javaPluginConvention.getSourceSets();
|
||||
project.afterEvaluate(p -> {
|
||||
Provider<Map<String, String>> dependencyNotationProvider = project.provider(() ->
|
||||
Map.of("group", "org.projectlombok",
|
||||
"name", "lombok",
|
||||
"version", ext.getVersion().get())
|
||||
);
|
||||
Configuration lombokConfiguration = project.getConfigurations().create("lombok");
|
||||
project.getDependencies().addProvider(
|
||||
lombokConfiguration.getName(),
|
||||
dependencyNotationProvider,
|
||||
externalModuleDependency -> {
|
||||
}
|
||||
);
|
||||
for (SourceSet ss : sourceSetContainer) {
|
||||
DependencyHandler dependencyHandler = project.getDependencies();
|
||||
dependencyHandler.addProvider(
|
||||
ss.getCompileOnlyConfigurationName(),
|
||||
dependencyNotationProvider,
|
||||
externalModuleDependency -> {
|
||||
});
|
||||
dependencyHandler.addProvider(
|
||||
ss.getAnnotationProcessorConfigurationName(),
|
||||
dependencyNotationProvider,
|
||||
externalModuleDependency -> {
|
||||
});
|
||||
TaskContainer tasks = project.getTasks();
|
||||
String javadocTaskName = ss.getJavadocTaskName();
|
||||
Task javadocTask = tasks.findByName(javadocTaskName);
|
||||
if(javadocTask != null) {
|
||||
String delombokTaskName = "delombok" + ss.getName().substring(0, 1).toUpperCase() + ss.getName().substring(1);
|
||||
File outputDir = new File(new File(project.getBuildDir(), "delombok"), ss.getName());
|
||||
Provider<Delombok> delombokTask = tasks.register(delombokTaskName,
|
||||
Delombok.class,
|
||||
lombokConfiguration.getSingleFile(),
|
||||
outputDir,
|
||||
ss.getJava().getSrcDirs(),
|
||||
ss.getCompileClasspath().getAsPath()
|
||||
);
|
||||
Javadoc javadoc = (Javadoc) javadocTask;
|
||||
javadoc.setSource(outputDir);
|
||||
javadoc.getInputs().files(delombokTask);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@@ -15,3 +15,4 @@ include("dependency-export")
|
||||
include("jpms-check")
|
||||
include("multi-release-jar")
|
||||
include("wildfly")
|
||||
include("lombok")
|
||||
|
Reference in New Issue
Block a user