Yatopia/buildSrc/src/main/kotlin/DependencyLoading.kt

65 lines
2.7 KiB
Kotlin

import kotlinx.dom.elements
import kotlinx.dom.parseXml
import kotlinx.dom.search
import org.gradle.api.Project
import org.gradle.api.artifacts.dsl.RepositoryHandler
import org.gradle.kotlin.dsl.DependencyHandlerScope
import org.gradle.kotlin.dsl.maven
import org.gradle.kotlin.dsl.project
fun RepositoryHandler.loadRepositories(project: Project) {
val pomFile = project.projectDir.resolve("pom.xml")
if (!pomFile.exists()) return
val dom = parseXml(pomFile)
val repositoriesBlock = dom.search("repositories").firstOrNull() ?: return
// Load repositories
repositoriesBlock.elements("repository").forEach { repositoryElem ->
val url = repositoryElem.search("url").firstOrNull()?.textContent ?: return@forEach
maven(url)
}
}
fun DependencyHandlerScope.loadDependencies(project: Project) {
val pomFile = project.projectDir.resolve("pom.xml")
if (!pomFile.exists()) return
val dom = parseXml(pomFile)
val dependenciesBlock = dom.search("dependencies").firstOrNull() ?: return
// Load dependencies
dependenciesBlock.elements("dependency").forEach { dependencyElem ->
val groupId = dependencyElem.search("groupId").first().textContent
val artifactId = dependencyElem.search("artifactId").first().textContent
val version = dependencyElem.search("version").first().textContent.applyReplacements(
"project.version" to "${project.rootProject.toothpick.minecraftVersion}-${project.rootProject.toothpick.nmsRevision}",
"minecraft.version" to project.toothpick.minecraftVersion
)
val scope = dependencyElem.search("scope").firstOrNull()?.textContent
val classifier = dependencyElem.search("classifier").firstOrNull()?.textContent
val dependencyString = "${groupId}:${artifactId}:${version}${classifier?.run { ":$this" } ?: ""}"
project.logger.debug("Read dependency '{}' from '{}'", dependencyString, pomFile.absolutePath)
// Special case API
if (artifactId == "${project.toothpick.forkNameLowercase}-api"
|| artifactId == "${project.toothpick.upstreamLowercase}-api"
) {
if (project.name.endsWith("-server")) {
add("api", project(":${project.toothpick.forkNameLowercase}-api"))
}
return@forEach
}
when (scope) {
"compile", null -> add("api", dependencyString)
"provided" -> {
add("compileOnly", dependencyString)
add("testImplementation", dependencyString)
}
"runtime" -> add("runtimeOnly", dependencyString)
"test" -> add("testImplementation", dependencyString)
}
}
}