Skip to content

Commit e3a85b5

Browse files
committed
Gradle plugin
1 parent be47a3f commit e3a85b5

File tree

6 files changed

+107
-96
lines changed

6 files changed

+107
-96
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ buildscript {
6666
Then you can create a task that compiles `module-info.java` like this:
6767

6868
```kotlin
69-
val compileModuleInfo = tasks.create<org.glavo.mic.tasks.CompileModuleInfo>("compileModuleInfo") {
69+
val compileModuleInfo = tasks.create<org.glavo.mic.plugin.tasks.CompileModuleInfo>("compileModuleInfo") {
7070
sourceFile.set(file("src/main/module-info.java"))
7171
targetFile.set(buildDir.resolve("classes/java/module-info/module-info.class"))
7272

build.gradle.kts

Lines changed: 40 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,87 @@
11
import java.util.Properties
22

33
plugins {
4-
id("java")
4+
`java-library`
55
id("com.github.johnrengelman.shadow") version "7.1.2"
66
`maven-publish`
77
signing
88
id("io.github.gradle-nexus.publish-plugin") version "1.1.0"
99
}
1010

11-
loadMavenPublishProperties()
12-
1311
allprojects {
1412
apply {
15-
plugin("java")
16-
plugin("maven-publish")
13+
plugin("java-library")
14+
plugin("com.github.johnrengelman.shadow")
1715
}
1816

1917
group = "org.glavo"
20-
version = "1.5"// + "-SNAPSHOT"
18+
version = "2.0-RC1" + "-SNAPSHOT"
2119

2220
repositories {
2321
mavenCentral()
2422
}
2523

26-
dependencies {
27-
compileOnly(gradleApi())
24+
tasks.compileJava {
25+
sourceCompatibility = "1.8"
26+
targetCompatibility = "1.8"
27+
}
2828

29-
testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1")
30-
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1")
29+
tasks.withType<Javadoc>().configureEach {
30+
(options as StandardJavadocDocletOptions).also {
31+
it.encoding("UTF-8")
32+
it.addStringOption("link", "https://docs.oracle.com/en/java/javase/17/docs/api/")
33+
it.addBooleanOption("html5", true)
34+
it.addStringOption("Xdoclint:none", "-quiet")
35+
}
3136
}
3237

38+
java {
39+
withSourcesJar()
40+
withJavadocJar()
41+
}
3342

34-
tasks.compileJava {
35-
sourceCompatibility = "1.8"
36-
targetCompatibility = "1.8"
43+
tasks.jar {
44+
archiveClassifier.set("core")
3745
}
3846

39-
tasks.getByName<Test>("test") {
40-
useJUnitPlatform()
47+
tasks.shadowJar {
48+
archiveClassifier.set("")
49+
50+
relocate("org.objectweb.asm", "org.glavo.mic.asm")
51+
relocate("com.github.javaparser", "org.glavo.mic.javaparser")
52+
53+
minimize()
4154
}
4255
}
4356

44-
description = "Compiler for module-info.java"
4557

4658
dependencies {
4759
implementation("com.github.javaparser:javaparser-core:3.24.2")
48-
// implementation("com.github.javaparser:javaparser-symbol-solver-core:3.24.2")
4960
implementation("org.ow2.asm:asm:9.3")
5061
}
5162

52-
tasks.jar {
53-
enabled = false
54-
dependsOn(tasks.shadowJar)
55-
}
63+
loadMavenPublishProperties()
5664

57-
tasks.shadowJar {
65+
description = "Compiler for module-info.java"
66+
67+
tasks.jar {
5868
manifest {
5969
attributes(
6070
"Main-Class" to "org.glavo.mic.ModuleInfoCompiler"
6171
)
6272
}
63-
64-
archiveClassifier.set(null as String?)
65-
66-
relocate("org.objectweb.asm", "org.glavo.mic.asm")
67-
relocate("com.github.javaparser", "org.glavo.mic.javaparser")
68-
69-
minimize()
70-
}
71-
72-
java {
73-
withSourcesJar()
74-
// withJavadocJar()
75-
}
76-
77-
tasks.create<Jar>("javadocJar") {
78-
group = "build"
79-
archiveClassifier.set("javadoc")
80-
}
81-
82-
tasks.withType<GenerateModuleMetadata>().configureEach {
83-
enabled = false
8473
}
8574

8675
configure<PublishingExtension> {
8776
publications {
8877
create<MavenPublication>("maven") {
78+
79+
project.shadow.component(this)
80+
8981
groupId = project.group.toString()
9082
version = project.version.toString()
9183
artifactId = project.name
92-
artifact(tasks.shadowJar)
84+
//artifact(tasks.shadowJar)
9385
artifact(tasks["sourcesJar"])
9486
artifact(tasks["javadocJar"])
9587

@@ -142,6 +134,10 @@ nexusPublishing {
142134
}
143135
}
144136

137+
tasks.withType<GenerateModuleMetadata> {
138+
enabled = false
139+
}
140+
145141
fun loadMavenPublishProperties() {
146142
var secretPropsFile = project.rootProject.file("gradle/maven-central-publish.properties")
147143
if (!secretPropsFile.exists()) {

gradle-plugin/build.gradle.kts

Lines changed: 13 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,32 @@
11
plugins {
22
`java-gradle-plugin`
3-
`maven-publish`
4-
id("com.github.johnrengelman.shadow") version "7.1.2"
5-
id("com.gradle.plugin-publish") version "1.0.0-rc-1"
3+
id("com.gradle.plugin-publish") version "0.18.0"
64
}
75

86
dependencies {
97
compileOnly(gradleApi())
8+
109
implementation(rootProject)
1110
}
1211

13-
tasks.jar {
14-
enabled = false
15-
dependsOn(tasks.shadowJar)
12+
configurations.named(JavaPlugin.API_CONFIGURATION_NAME) {
13+
dependencies.remove(project.dependencies.gradleApi())
1614
}
1715

18-
tasks.shadowJar {
19-
archiveClassifier.set(null as String?)
20-
21-
relocate("org.objectweb.asm", "org.glavo.mic.plugin.asm")
22-
relocate("com.github.javaparser", "org.glavo.mic.plugin.javaparser")
23-
minimize()
16+
pluginBundle {
17+
website = "https://github.com/Glavo/module-info-compiler"
18+
vcsUrl = "https://github.com/Glavo/module-info-compiler.git"
19+
tags = listOf("java", "modules", "jpms", "modularity")
2420
}
2521

2622
gradlePlugin {
2723
plugins {
28-
create("kala-retro8") {
29-
id = "org.glavo.mic.plugin"
30-
displayName = "ModuleInfo Compiler"
31-
description = ""
32-
implementationClass = "kala.plugins.retro8.Retro8Plugin"
24+
create("compileModuleInfoPlugin") {
25+
id = "org.glavo.compile-module-info"
26+
displayName = "Compile Module Info Plugin"
27+
description = rootProject.description
28+
implementationClass = "org.glavo.mic.plugin.CompileModuleInfoPlugin"
3329
}
3430
}
3531
}
3632

37-
pluginBundle {
38-
website = "https://github.com/Glavo/kala-retro8"
39-
vcsUrl = "https://github.com/Glavo/kala-retro8.git"
40-
tags = listOf("java", "modules", "jpms", "modularity")
41-
}
42-
43-
publishing {
44-
repositories {
45-
mavenLocal()
46-
}
47-
48-
publications {
49-
this.create<MavenPublication>("pluginMaven") {
50-
groupId = project.group.toString()
51-
artifactId = project.name
52-
version = project.version.toString()
53-
}
54-
}
55-
}
Lines changed: 51 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,62 @@
11
package org.glavo.mic.plugin;
22

3-
import org.gradle.api.Plugin;
4-
import org.gradle.api.Project;
5-
import org.gradle.api.plugins.JavaPlugin;
6-
import org.gradle.jvm.tasks.Jar;
3+
import org.glavo.mic.plugin.tasks.CompileModuleInfo;
4+
import org.gradle.api.*;
5+
import org.gradle.api.plugins.JavaPluginConvention;
6+
import org.gradle.api.plugins.JavaPluginExtension;
7+
import org.gradle.api.tasks.SourceSet;
8+
import org.gradle.api.tasks.TaskProvider;
9+
import org.gradle.api.tasks.compile.JavaCompile;
10+
import org.gradle.util.GradleVersion;
711

8-
import java.io.File;
12+
import java.nio.file.Files;
13+
import java.nio.file.Path;
14+
import java.util.Optional;
915

1016
public class CompileModuleInfoPlugin implements Plugin<Project> {
1117
@Override
1218
public void apply(Project project) {
13-
project.getPlugins().apply(JavaPlugin.class);
19+
project.getPlugins().apply("java");
1420

15-
CompileModuleInfo compileModuleInfo = project.getTasks().create("compileModuleInfo", CompileModuleInfo.class, task -> {
16-
task.getSourceFile().set(project.file("src/main/java/module-info.java"));
17-
task.getTargetFile().set(new File(project.getBuildDir(), "module-info/module-info.class"));
18-
});
21+
SourceSet main;
22+
try {
23+
if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) {
24+
JavaPluginExtension javaPluginExtension = project.getExtensions().getByType(JavaPluginExtension.class);
25+
main = javaPluginExtension.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME);
26+
} else {
27+
JavaPluginConvention javaConvention = project.getConvention().getPlugin(JavaPluginConvention.class);
28+
main = javaConvention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME);
29+
}
30+
} catch (IllegalStateException | UnknownDomainObjectException e) {
31+
throw new GradleException("Cannot obtain JavaPluginConvention", e);
32+
}
1933

20-
Jar jarTask = (Jar) project.getTasks().getByName("jar");
21-
jarTask.dependsOn(compileModuleInfo);
22-
jarTask.from(compileModuleInfo.getTargetFile());
34+
Optional<Path> moduleInfoJava = main.getAllJava()
35+
.getSourceDirectories()
36+
.getFiles()
37+
.stream()
38+
.map(sourceDir -> sourceDir.toPath().resolve("module-info.java"))
39+
.filter(Files::exists)
40+
.findAny();
41+
42+
if (moduleInfoJava.isPresent()) {
43+
JavaCompile compileJava = (JavaCompile) project.getTasks().getByName("compileJava");
44+
compileJava.getModularity().getInferModulePath().set(false);
45+
compileJava.exclude("module-info.java");
46+
47+
Path path = moduleInfoJava.get();
48+
Path outputDir = project.getBuildDir().toPath().resolve("classes").resolve("module-info").resolve("main");
49+
main.getOutput().dir(outputDir);
50+
//noinspection Convert2Lambda
51+
TaskProvider<CompileModuleInfo> compileModuleInfo = project.getTasks().register("compileModuleInfo", CompileModuleInfo.class, new Action<CompileModuleInfo>() {
52+
@Override
53+
public void execute(CompileModuleInfo task) {
54+
task.getSourceFile().set(path.toFile());
55+
task.getTargetFile().set(outputDir.resolve("module-info.class").toFile());
56+
}
57+
});
58+
59+
project.getTasks().getByName("classes").dependsOn(compileModuleInfo);
60+
}
2361
}
2462
}

src/main/java/org/glavo/mic/tasks/CompileModuleInfo.java renamed to gradle-plugin/src/main/java/org/glavo/mic/plugin/tasks/CompileModuleInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.glavo.mic.tasks;
1+
package org.glavo.mic.plugin.tasks;
22

33
import org.glavo.mic.ModuleInfoCompiler;
44
import org.gradle.api.DefaultTask;

settings.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
rootProject.name = "module-info-compiler"
22

3-
// include("gradle-plugin")
3+
include("gradle-plugin")

0 commit comments

Comments
 (0)