Skip to content

Commit

Permalink
Development Update
Browse files Browse the repository at this point in the history
- Drop blossom plugin
- Update Gradle to 8.4
- Improve Gradle build logic
-
  • Loading branch information
Hendrix-Shen committed Nov 11, 2023
1 parent 481aad0 commit b8f83fa
Show file tree
Hide file tree
Showing 37 changed files with 226 additions and 89 deletions.
8 changes: 4 additions & 4 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle', 'gradle.properties', '**/*.accesswidener') }}
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle') }}
restore-keys: ${{ runner.os }}-gradle-

- name: Get short commit sha
Expand Down Expand Up @@ -63,7 +63,7 @@ jobs:
COMMIT_SHA: ${{ steps.get_short_sha.outputs.short_sha }}
BUILD_TYPE: "BETA"
BUILD_NUMBER: ${{ github.run_number }}
run: ./gradlew shadowJar
run: ./gradlew build

- name: Upload assets to GitHub Action
uses: actions/upload-artifact@v2
Expand Down Expand Up @@ -113,7 +113,7 @@ jobs:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle', 'gradle.properties', '**/*.accesswidener') }}
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle') }}
restore-keys: ${{ runner.os }}-gradle-

- name: Get short commit sha
Expand Down Expand Up @@ -144,7 +144,7 @@ jobs:
COMMIT_SHA: ${{ steps.get_short_sha.outputs.short_sha }}
BUILD_TYPE: "RELEASE"
BUILD_NUMBER: ${{ github.run_number }}
run: ./gradlew shadowJar
run: ./gradlew build

- name: Upload assets to GitHub Action
uses: actions/upload-artifact@v2
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
dependencies {
compileOnly("io.github.waterfallmc:waterfall-api:${project.waterfall_version}")
implementation(project(":autoworldmap-common"))
shade(implementation(project(":autoworldmap-common")))
}

processResources {
Expand All @@ -9,7 +9,7 @@ processResources {
"plugin_author": project.plugin_author,
"plugin_description": project.plugin_description,
"plugin_name": project.plugin_name,
"plugin_version": version
"plugin_version": project.version
])
}
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,19 @@ public class SharedConstant {
public static final String XAERO_MINI_MAP_CHANNEL = XAERO_MINI_MAP_NAMESPACE + ":" + XAERO_MINI_MAP_NAME;

@Getter
private static final String pluginAuthor = "{plugin_author_string}";
private static final String pluginAuthor = "The-Cat-Town-Craft, Hendrix-Shen";
@Getter
private static final String pluginDescription = "{plugin_description}";
private static final String pluginDescription = "Automatic map switching for VoxelMap, XaeroMap when switching servers.";
@Getter
private static final String pluginID = "{plugin_id}";
private static final String pluginID = "auto-world-map";
@Getter
private static final String pluginName = "{plugin_name}";
private static final String pluginName = "AutoWorldMap";
@Getter
private static final String pluginPermissionRoot = "{plugin_permission_root}";
private static final String pluginPermissionRoot = "autoworldmap";
@Getter
private static final String pluginUrl = "{plugin_url}";
private static final String pluginUrl = "https://github.com/The-Cat-Town-Craft/Auto-World-Map";
@Getter
private static final String pluginVersion = "{plugin_version}";
private static final String pluginVersion = "@PLUGIN_VERSION@";

public static final List<String> CONFIG_HEADER = Arrays.asList(
" ==================================================",
Expand Down
21 changes: 21 additions & 0 deletions autoworldmap-velocity/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import groovy.json.JsonBuilder
import groovy.json.JsonSlurper

dependencies {
annotationProcessor("com.velocitypowered:velocity-api:${project.velocity_version}")
compileOnly("com.velocitypowered:velocity-api:${project.velocity_version}")
shade(implementation(project(":autoworldmap-common")))
}

tasks.named("classes") {
doLast {
File file = file("build/classes/java/main/velocity-plugin.json")
JsonSlurper slurper = new JsonSlurper()
JsonBuilder builder = new JsonBuilder(slurper.parse(file))
builder.content.version = project.version
BufferedWriter writer = file.newWriter()
writer.append(builder.toString())
writer.flush()
writer.close()
}
}
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@

import java.util.logging.Logger;

@Plugin(id = "{plugin_id}",
name = "{plugin_name}",
version = "{plugin_version}",
url = "{plugin_url}",
description = "{plugin_description}",
authors = {"{plugin_author_list}"},
@Plugin(id = "auto-world-map",
name = "AutoWorldMap",
version = "@PLUGIN_VERSION@",
url = "https://github.com/The-Cat-Town-Craft/Auto-World-Map",
description = "Automatic map switching for VoxelMap, XaeroMap when switching servers.",
authors = {"The-Cat-Town-Craft", "Hendrix-Shen"},
dependencies = @Dependency(id = "protocolize")
)
@Singleton
Expand Down
183 changes: 144 additions & 39 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,34 +1,50 @@
import org.objectweb.asm.ClassReader
import org.objectweb.asm.ClassWriter
import org.objectweb.asm.tree.ClassNode
import org.objectweb.asm.tree.LdcInsnNode
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

plugins {
id("java")
id("com.github.johnrengelman.shadow").version("7.1.2")
id("net.kyori.blossom").version("1.3.1")
id("com.github.johnrengelman.shadow").version("8.1.1")
}

allprojects {
apply(plugin: "java")
apply(plugin: "com.github.johnrengelman.shadow")
apply(plugin: "net.kyori.blossom")

configurations {
register("shade")
register("shadeOnly")

compileOnly.extendsFrom(shade)
}

repositories {
mavenCentral()

maven {
name("JitPack Maven")
name("JitPack")
url("https://jitpack.io")
}
maven {
name("Exceptionflug Maven")
name("Exceptionflug")
url("https://mvn.exceptionflug.de/repository/exceptionflug-public")
}
maven {
name("PaperMC Maven")
name("PaperMC")
url("https://repo.papermc.io/repository/maven-public")
}
}

dependencies {
annotationProcessor("org.projectlombok:lombok:${project.lombok_version}")
compileOnly("org.projectlombok:lombok:${project.lombok_version}")
compileOnly("dev.simplix:protocolize-api:${project.protocolize_version}")
implementation("com.github.simplix-softworks:simplixstorage:${project.simplixstorage_version}")
compileOnly("com.github.simplix-softworks:simplixstorage:${project.simplixstorage_version}")
shadeOnly("com.github.simplix-softworks:simplixstorage:${project.simplixstorage_version}") {
transitive = false
}
}

group = project.maven_group
Expand All @@ -48,70 +64,159 @@ allprojects {
realVersion += "-dev"
}

version = realVersion
description = project.plugin_description
description(project.plugin_description)

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
tasks.withType(JavaCompile).configureEach {
options.encoding = "UTF-8"
base {
if (project.name != rootProject.name) {
archivesBaseName("${rootProject.name}${project.name.replace("${project.plugin_name}".toLowerCase(), "")}")
}

version(realVersion)
}

blossom {
replaceToken("{plugin_author_list}", project.plugin_author.replaceAll(", ", "\", \""))
replaceToken("{plugin_author_string}", project.plugin_author)
replaceToken("{plugin_description}", project.plugin_description)
replaceToken("{plugin_id}", project.plugin_id)
replaceToken("{plugin_name}", project.plugin_name)
replaceToken("{plugin_permission_root}", project.plugin_id.replaceAll("-", ""))
replaceToken("{plugin_url}", project.plugin_url)
replaceToken("{plugin_version}", version)
java {
sourceCompatibility(JavaVersion.VERSION_1_8)
targetCompatibility(JavaVersion.VERSION_1_8)

withSourcesJar()
}

shadowJar {
from("LICENSE")
tasks.withType(JavaCompile).configureEach {
options.encoding("UTF-8")
}

dependencies {
exclude(dependency("com.esotericsoftware.yamlbeans:yamlbeans:.*"))
exclude(dependency("org.jetbrains:annotations:.*"))
exclude(dependency("org.json:json:.*"))
}
tasks.named("shadowJar") { ShadowJar task ->
task.from("LICENSE")

task.configurations.clear()
task.configurations.add(project.configurations.shade)
task.configurations.add(project.configurations.shadeOnly)

task.exclude("META-INF/maven/**/*", "META-INF/*.txt")
task.relocate("de.leonhard.storage", "${project.maven_group.replaceAll("-", "")}.lib.de.leonhard.storage")

relocate("de.leonhard.storage", "${project.maven_group}.${project.plugin_id.replaceAll("-", "")}.lib.de.leonhard.storage")
// Remove '-all' suffix
classifier(null)
task.archiveClassifier.set(null)
}

if (project.name != rootProject.name) {
archiveBaseName.set("${rootProject.name}${project.name.replace("${project.plugin_name}".toLowerCase(), "")}")
tasks.named("assemble") { task ->
task.dependsOn(tasks.shadowJar)
}

Map<Object, Object> replaceTokenMap = new HashMap<>()
replaceTokenMap.put("@PLUGIN_VERSION@", project.version)
List<Object> replaceTokenFile = new ArrayList<>()
replaceTokenFile.add("AutoWorldMapVelocity")
replaceTokenFile.add("SharedConstant")

tasks.named("classes") {
doLast {
File dir = file("${projectDir}/build/classes/java")

if (!dir.exists()) {
return
}

dir.eachFileRecurse {
String path = it.path.replace(dir.path, "")

if (path.endsWith(".class") && replaceTokenFile.stream().anyMatch { path.contains(it as String) }) {
ClassReader cr = new ClassReader(it.newInputStream().bytes)
ClassNode cn = new ClassNode()
cr.accept(cn, ClassReader.SKIP_FRAMES | ClassReader.SKIP_DEBUG)

// ReplaceToken in fields
cn.fields.each {
if (it.desc == "Ljava/lang/String;" && it.value instanceof String) {
String value = it.value as String

replaceTokenMap.each {
value = value.replace(it.key as String, it.value as String)
}

it.value = value
}
}

// ReplaceToken in methods
cn.methods.each {
it.instructions.each {
if (it instanceof LdcInsnNode) {
LdcInsnNode ldc = it as LdcInsnNode

if (ldc.cst instanceof String) {
String value = ldc.cst as String

replaceTokenMap.each {
value = value.replace(it.key as String, it.value as String)
}

ldc.cst = value
}
}
}
}

// ReplaceToken in class annotations
if (cn.visibleAnnotations != null) {
cn.visibleAnnotations.forEach {
if (it.values != null) {
// Skip keys
for (int i = 1; i < it.values.size(); i += 2) {
Object value = it.values.get(i)

if (value instanceof String) {
replaceTokenMap.each {
value = value.replace(it.key as String, it.value as String)
}

it.values.set(i, value)
}
}
}
}
}

ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES)
cn.accept(cw)
new FileOutputStream(it).write(cw.toByteArray())
}
}

dir = file("${projectDir}/build/classes/java")
}
}
}

shadowJar {
tasks.named("shadowJar") { ShadowJar task ->
// Disable cache
outputs.upToDateWhen { false }

dependsOn(project.subprojects.collect {
// Possible solution, it works.
it.name == "${project.plugin_id.replaceAll("-", "")}-common" ? it.tasks.jar : it.tasks.shadowJar
it.name == "autoworldmap-common" ? it.tasks.jar : it.tasks.shadowJar
})

doFirst {
// Clean up legacy files.
delete fileTree("build/tmp/merged")

copy {
from {
project.subprojects.collect {
"${it.buildDir}/classes/java/main"
"${it.projectDir}/build/classes/java/main"
}
}

from {
project.subprojects.collect {
"${it.buildDir}/resources/main"
"${it.projectDir}/build/resources/main"
}
}

into("build/tmp/merged")
}
}

from("build/tmp/merged")
}
task.from("build/tmp/merged")
}
8 changes: 4 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Plugin reference
maven_group=top.catowncraft
maven_group=top.catowncraft.auto-world-map
plugin_author=The-Cat-Town-Craft, Hendrix-Shen
plugin_name=AutoWorldMap
plugin_version=1.3
Expand All @@ -8,6 +8,6 @@ plugin_id=auto-world-map
plugin_url=https://github.com/The-Cat-Town-Craft/Auto-World-Map

# Development Environment
lombok_version=1.18.28
protocolize_version=2.2.5
simplixstorage_version=3.2.6
lombok_version=1.18.30
protocolize_version=2.3.1
simplixstorage_version=3.2.7
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading

0 comments on commit b8f83fa

Please sign in to comment.