Skip to content

Commit 990257b

Browse files
committed
Migrate sources-fat-jar from extra function to plugin
1 parent 334d962 commit 990257b

File tree

5 files changed

+113
-88
lines changed

5 files changed

+113
-88
lines changed

build.gradle.kts

Lines changed: 0 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -105,82 +105,4 @@ subprojects {
105105
apply(plugin = "publish-modrinth")
106106
}
107107
}
108-
}
109-
110-
val sourcesRelocate by extra {
111-
fun(project: Project, relocates: List<String>, postSources: (String) -> String) {
112-
with(project) {
113-
val sourcesFatJar = tasks.register("sourcesFatJar", Jar::class) {
114-
dependsOn(tasks.classes)
115-
group = "build"
116-
archiveClassifier.value("sources")
117-
118-
val tmpDir = temporaryDir
119-
tmpDir.deleteRecursively()
120-
121-
val result = dependencies.createArtifactResolutionQuery()
122-
.forComponents(configurations.runtimeClasspath.get().incoming.resolutionResult.allDependencies.filter {
123-
!it.from.id.displayName.startsWith("org.jetbrains.kotlin:kotlin-stdlib")
124-
}.map { it.from.id }).withArtifacts(JvmLibrary::class.java, SourcesArtifact::class.java).execute()
125-
val replace = { str: String ->
126-
val destPrefix = "io.github.rothes.${rootProject.name.lowercase()}.lib."
127-
fun String.relocate(s: String) = replace(s, destPrefix + s)
128-
var res = str
129-
relocates.forEach { res = res.relocate(it) }
130-
postSources(res)
131-
}
132-
for (component in result.resolvedComponents) {
133-
component.getArtifacts(SourcesArtifact::class.java).forEach {
134-
if (it is ResolvedArtifactResult) {
135-
zipTree(it.file.absolutePath).visit {
136-
if (path.startsWith("META-INF") || file.isDirectory) return@visit
137-
val tmp = tmpDir.resolve(path)
138-
tmp.parentFile.mkdirs()
139-
tmp.writeText(replace(file.readText()))
140-
from(tmp) {
141-
duplicatesStrategy = DuplicatesStrategy.WARN
142-
into(
143-
"io/github/rothes/${rootProject.name.lowercase()}/lib/" + path.substringBeforeLast(
144-
"/"
145-
)
146-
)
147-
}
148-
}
149-
}
150-
}
151-
}
152-
}
153-
154-
tasks.shadowJar {
155-
val pkg = "io.github.rothes.${rootProject.name.lowercase()}.lib"
156-
fun relocate(pattern: String) {
157-
relocate(pattern, "$pkg.$pattern")
158-
}
159-
relocates.forEach { relocate(it) }
160-
161-
mergeServiceFiles()
162-
163-
dependsOn(sourcesFatJar)
164-
}
165-
166-
publishing {
167-
repositories {
168-
mavenLocal()
169-
}
170-
publications {
171-
create<MavenPublication>("mavenJar") {
172-
from(components["shadow"])
173-
174-
artifact(sourcesFatJar) {
175-
classifier = "sources"
176-
}
177-
178-
artifactId = project.name
179-
groupId = project.group as String?
180-
version = project.version as String?
181-
}
182-
}
183-
}
184-
}
185-
}
186108
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
plugins {
2+
java
3+
`maven-publish`
4+
id("com.gradleup.shadow")
5+
}
6+
7+
interface SourcesFatJarExtension {
8+
val relocates: ListProperty<String>
9+
val postSources: Property<(String) -> String>
10+
}
11+
12+
val extension = project.extensions.create<SourcesFatJarExtension>("sourcesFatJar")
13+
extension.postSources.convention { it }
14+
15+
val sourcesFatJar = tasks.register("sourcesFatJar", Jar::class) {
16+
dependsOn(tasks.classes)
17+
group = "build"
18+
archiveClassifier.value("sources")
19+
20+
val tmpDir = temporaryDir
21+
tmpDir.deleteRecursively()
22+
23+
val result = dependencies.createArtifactResolutionQuery()
24+
.forComponents(configurations.runtimeClasspath.get().incoming.resolutionResult.allDependencies.filter {
25+
!it.from.id.displayName.startsWith("org.jetbrains.kotlin:kotlin-stdlib")
26+
}.map { it.from.id }).withArtifacts(JvmLibrary::class.java, SourcesArtifact::class.java).execute()
27+
val replace = { str: String ->
28+
val destPrefix = "io.github.rothes.${rootProject.name.lowercase()}.lib."
29+
fun String.relocate(s: String) = replace(s, destPrefix + s)
30+
var res = str
31+
extension.relocates.get().forEach { res = res.relocate(it) }
32+
extension.postSources.get().invoke(res)
33+
}
34+
for (component in result.resolvedComponents) {
35+
component.getArtifacts(SourcesArtifact::class.java).forEach {
36+
if (it is ResolvedArtifactResult) {
37+
zipTree(it.file.absolutePath).visit {
38+
if (path.startsWith("META-INF") || file.isDirectory) return@visit
39+
val tmp = tmpDir.resolve(path)
40+
tmp.parentFile.mkdirs()
41+
tmp.writeText(replace(file.readText()))
42+
from(tmp) {
43+
duplicatesStrategy = DuplicatesStrategy.WARN
44+
into(
45+
"io/github/rothes/${rootProject.name.lowercase()}/lib/" + path.substringBeforeLast(
46+
"/"
47+
)
48+
)
49+
}
50+
}
51+
}
52+
}
53+
}
54+
}
55+
56+
publishing {
57+
repositories {
58+
mavenLocal()
59+
}
60+
publications {
61+
create<MavenPublication>("mavenJar") {
62+
from(components["shadow"])
63+
64+
artifact(sourcesFatJar) {
65+
classifier = "sources"
66+
}
67+
68+
artifactId = project.name
69+
groupId = project.group as String?
70+
version = project.version as String?
71+
}
72+
}
73+
}
74+
75+
tasks.shadowJar {
76+
doFirst { // Wait for configuration
77+
val pkg = "io.github.rothes.${rootProject.name.lowercase()}.lib"
78+
fun relocate(pattern: String) {
79+
relocate(pattern, "$pkg.$pattern")
80+
}
81+
82+
extension.relocates.get().forEach { relocate(it) }
83+
84+
mergeServiceFiles()
85+
}
86+
87+
dependsOn(sourcesFatJar)
88+
}

bukkit/dep-bukkit/build.gradle.kts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
plugins {
2+
`sources-fat-jar`
3+
}
4+
15
repositories {
26
mavenLocal()
37
mavenCentral()
@@ -7,6 +11,6 @@ dependencies {
711
implementation("net.kyori:adventure-platform-bukkit:4.4.1")
812
}
913

10-
val sourcesRelocate: (Project, List<String>, (String) -> String) -> Unit by rootProject.extra
11-
12-
sourcesRelocate(project, listOf("net.kyori")) { it }
14+
sourcesFatJar {
15+
relocates.add("net.kyori")
16+
}

core/dep-core/build.gradle.kts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
plugins {
2+
`sources-fat-jar`
3+
}
4+
15
repositories {
26
mavenLocal()
37
mavenCentral()
@@ -15,6 +19,6 @@ dependencies {
1519
implementation("net.kyori:adventure-text-serializer-plain:$adventureVersion")
1620
}
1721

18-
val sourcesRelocate: (Project, List<String>, (String) -> String) -> Unit by rootProject.extra
19-
20-
sourcesRelocate(project, listOf("net.kyori")) { it }
22+
sourcesFatJar {
23+
relocates.add("net.kyori")
24+
}
Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
plugins {
2+
`sources-fat-jar`
3+
}
4+
15
repositories {
26
mavenLocal()
37
mavenCentral()
@@ -9,9 +13,12 @@ dependencies {
913
implementation("com.github.Rothes.Configurate:configurate-yaml:master-SNAPSHOT")
1014
}
1115

12-
val sourcesRelocate: (Project, List<String>, (String) -> String) -> Unit by rootProject.extra
16+
sourcesFatJar {
17+
relocates.add("net.kyori")
18+
relocates.add("org.spongepowered")
1319

14-
sourcesRelocate(project, listOf("org.spongepowered", "net.kyori")) {
15-
val destPrefix = "io.github.rothes.${rootProject.name.lowercase()}.lib."
16-
it.replace("org.yaml.snakeyaml", destPrefix + "org.spongepowered.configurate.yaml.internal.snakeyaml")
20+
postSources.set {
21+
val destPrefix = "io.github.rothes.${rootProject.name.lowercase()}.lib."
22+
it.replace("org.yaml.snakeyaml", destPrefix + "org.spongepowered.configurate.yaml.internal.snakeyaml")
23+
}
1724
}

0 commit comments

Comments
 (0)