Files
2026-04-18 15:47:23 -05:00

126 lines
4.0 KiB
Groovy

import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
plugins {
id "java"
id "com.gradleup.shadow"
}
repositories {
mavenCentral()
}
tasks.withType(JavaCompile).configureEach {
options.release = 8
options.encoding = "UTF-8"
}
configurations {
testImplementation.extendsFrom compileOnly
}
dependencies {
compileOnly "org.apache.logging.log4j:log4j-api:${rootProject.log4j_version}"
testImplementation "junit:junit:4.13"
}
java {
withSourcesJar()
}
task createReleaseApiJar(type: ShadowJar) {
mustRunAfter sourcesJar
dependsOn shadowJar
// the compiled "-all" jar is used since it's available at the time this task is run
def compiledJarPath = "build/libs/DistantHorizonsApi-${rootProject.api_version}-all.jar"
def compiledJarFile = file(compiledJarPath)
// doFirst is so these only run when the task is actually executed
doFirst {
System.out.println("Adding class files from: \n" +
"[" + compiledJarPath + "] to source API jar: \n" +
"[" + shadowJar.archiveFile.get().asFile + "]")
// Validate the input JAR file
if (!compiledJarFile.exists()) {
throw new GradleException("Compiled JAR file not found: [${compiledJarFile}]")
}
}
archiveFileName.set("DistantHorizonsApi-${rootProject.api_version}-combined.jar") // jar name
destinationDirectory = file('build/libs/') // jar location
// Set the input JAR files to be combined
from sourceSets.main.allJava
from {
project.configurations.shadow.collect { it.isDirectory() ? it : zipTree(it) }
}
// add the class files
from zipTree(compiledJarFile)
// alternative method to Include the source files in the combined JAR
// and/or see which files are being included
eachFile { file ->
// can be set to true for debugging
def useAlternateEmbedMethod = false
def showFileEmbedding = false
if (showFileEmbedding || useAlternateEmbedMethod) {
System.out.println("attempting to add file: " + file)
def relativePath = file.relativePath.pathString
if (relativePath.endsWith('.class')) {
System.out.println("class file: " + relativePath)
def sourceFile = file.file.parentFile.resolveSibling('src/main/java/' + relativePath.replace('.class', '.java'))
if (sourceFile.exists()) {
System.out.println("adding source file: " + sourceFile)
if (useAlternateEmbedMethod) {
file.withInputStream { inputStream ->
copy {
from(inputStream)
into(relativePath.replace('.class', '.java'))
}
}
}
} else {
System.out.println('missing source file: ' + sourceFile)
}
}
}
}
}
// always create a combined jar for easy deployment
assemble.dependsOn(createReleaseApiJar)
shadowJar {
// required for basic shadowJar setup
configurations = [project.configurations.shadow]
}
javadoc {
options {
// Don't log warnings.
// There are a lot of warnings related to missing @param and @return javadocs
// that aren't necessary and would clutter up said javadocs.
// For more info see: https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html
addStringOption('Xdoclint:all,-missing', '-quiet')
}
}
// set the jar name
def configureJar = { task ->
// outputs in the format:
// "DistantHorizonsApi-6.0.0.jar"
// "DistantHorizonsApi-6.0.0-sources.jar"
task.archiveBaseName = rootProject.api_name
task.archiveVersion = rootProject.api_version
}
configureJar(tasks.named("jar").get())
configureJar(tasks.named("sourcesJar").get())
configureJar(tasks.named("shadowJar").get())