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("jpms-check")
|
||||||
include("multi-release-jar")
|
include("multi-release-jar")
|
||||||
include("wildfly")
|
include("wildfly")
|
||||||
|
include("lombok")
|
||||||
|
Reference in New Issue
Block a user