223 lines
8.6 KiB
Groovy
223 lines
8.6 KiB
Groovy
plugins {
|
|
id 'com.github.johnrengelman.shadow'
|
|
id 'java'
|
|
id 'com.adarshr.test-logger' version '3.2.0'
|
|
id 'checkstyle'
|
|
id 'org.gradlex.extra-java-module-info' version '1.8'
|
|
}
|
|
|
|
java {
|
|
// Must be disabled in order to use the gradle-modules-plugin
|
|
modularity.inferModulePath = false
|
|
}
|
|
|
|
def buildProperties = new Properties()
|
|
file('./src/main/resources/build.properties').withInputStream { buildProperties.load(it) }
|
|
group = 'info.openrocket'
|
|
version = buildProperties['build.version']
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
maven { url "https://repository.mulesoft.org/nexus/content/repositories/public/" }
|
|
}
|
|
|
|
checkstyle {
|
|
ignoreFailures = false
|
|
maxWarnings = 0
|
|
}
|
|
|
|
// Some older libraries are not modularized, so we need to add module-info.java files for them.
|
|
extraJavaModuleInfo {
|
|
failOnMissingModuleInfo.set(false)
|
|
module('obj-0.4.0.jar', 'de.javagl.obj', '0.4.0')
|
|
}
|
|
|
|
dependencies {
|
|
implementation group: 'org.commonmark', name: 'commonmark', version: '0.21.0'
|
|
implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.12'
|
|
implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.5.0'
|
|
implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0'
|
|
implementation group: 'com.google.inject', name: 'guice', version: '7.0.0'
|
|
implementation group: 'com.opencsv', name: 'opencsv', version: '5.7.1'
|
|
implementation group: 'org.graalvm.sdk', name: 'graal-sdk', version: '23.0.3'
|
|
implementation group: 'org.graalvm.js', name: 'js-scriptengine', version: '23.0.3'
|
|
implementation group: 'org.graalvm.js', name: 'js', version: '23.0.3'
|
|
implementation group: 'org.graalvm.truffle', name: 'truffle-api', version: '23.0.3'
|
|
implementation group: 'com.ibm.icu', name: 'icu4j', version: '71.2'
|
|
implementation files('libs/script-api-1.0.jar')
|
|
implementation group: 'io.github.classgraph', name: 'classgraph', version: '4.8.165'
|
|
implementation group: 'org.locationtech.jts', name: 'jts-core', version: '1.19.0'
|
|
|
|
implementation 'de.javagl:obj:0.4.0'
|
|
|
|
implementation group: 'jakarta.activation', name: 'jakarta.activation-api', version: '2.1.2'
|
|
implementation group: 'org.glassfish.jaxb', name: 'jaxb-runtime', version: '4.0.5'
|
|
implementation group: 'org.glassfish', name: 'jakarta.json', version: '2.0.1'
|
|
implementation group: 'org.eclipse', name: 'yasson', version: '2.0.1'
|
|
}
|
|
|
|
def serializedEnginesPath = './src/main/resources/datafiles/thrustcurves/thrustcurves.ser'
|
|
def serializedEnginesPathDist = './build/resources/main/datafiles/thrustcurves/thrustcurves.ser'
|
|
// Executes the serialization of engines from ThrustCurve for a build.
|
|
tasks.register('serializeEngines') {
|
|
dependsOn serializeEnginesDelete
|
|
dependsOn serializeEnginesExecute
|
|
}
|
|
tasks.register('serializeEnginesDist') {
|
|
dependsOn serializeEnginesExecuteDist
|
|
}
|
|
// Deletes the serialize engine file if it exists.
|
|
tasks.register('serializeEnginesDelete', Delete) {
|
|
delete fileTree(serializedEnginesPath)
|
|
|
|
doFirst {
|
|
println "Starting serializeEnginesDelete..."
|
|
}
|
|
doLast {
|
|
println "...serializeEnginesDelete Completed"
|
|
}
|
|
}
|
|
// Executes the Java serialization program to fetch ThrustCurve rocket data and serialize it.
|
|
tasks.register('serializeEnginesExecute', JavaExec) {
|
|
dependsOn serializeEnginesDelete
|
|
workingDir new File(projectDir, 'build/tmp')
|
|
classpath = sourceSets.main.runtimeClasspath
|
|
mainClass.set('info.openrocket.core.thrustcurve.SerializeThrustcurveMotors')
|
|
args '../../resources-src/datafiles/thrustcurves/', '../.' + serializedEnginesPath
|
|
|
|
doFirst {
|
|
println "Starting serializeEnginesExecute..."
|
|
// println "${serializedEnginesPath}"
|
|
}
|
|
doLast {
|
|
println "...serializeEnginesExecute Completed"
|
|
}
|
|
}
|
|
// Executes the Java serialization program to fetch ThrustCurve rocket data and serialize it.
|
|
// TODO: Shouldn't need a seperate task, but the args are not changing when dynamically updating
|
|
// the variable.
|
|
tasks.register('serializeEnginesExecuteDist', JavaExec) {
|
|
dependsOn serializeEnginesDelete
|
|
workingDir new File(projectDir, 'build/tmp')
|
|
classpath = sourceSets.main.runtimeClasspath
|
|
mainClass.set('info.openrocket.core.thrustcurve.SerializeThrustcurveMotors')
|
|
args '../../resources-src/datafiles/thrustcurves/', '../.' + serializedEnginesPathDist
|
|
|
|
doFirst {
|
|
println "Starting serializeEnginesExecuteDist..."
|
|
}
|
|
doLast {
|
|
println "...serializeEnginesExecuteDist Completed"
|
|
}
|
|
}
|
|
// Validates that the serialize engines file exists.
|
|
tasks.register('serializeEnginesValidate') {
|
|
if (!project.file(serializedEnginesPath).exists()) {
|
|
def message = "The serialized engine file does not exist at the following location:\n${project.file(serializedEnginesPath)}.\n" +
|
|
"You will need to run the following from the command line in order to generate the serialized engine file:\n"
|
|
"% ./gradlew serializeEngines\n" +
|
|
"\n";
|
|
println message
|
|
throw new GradleException('Invalid serialized engine file.')
|
|
} else {
|
|
def message = "Serialized engine file found.\n\n";
|
|
println message
|
|
}
|
|
}
|
|
|
|
tasks.register('copyReadmeMain', Copy) {
|
|
doLast {
|
|
from('../') {
|
|
include 'ReleaseNotes.md'
|
|
}
|
|
into './src/main/resources'
|
|
}
|
|
}
|
|
|
|
def externalComponentsPath = './src/main/resources/datafiles/components/database'
|
|
def externalResourceComponents = './resources-src/datafiles/openrocket-database'
|
|
|
|
// Initializes the submodules in Git.
|
|
tasks.register('submoduleInit') {
|
|
doLast {
|
|
exec {
|
|
workingDir "../"
|
|
executable 'git'
|
|
args 'submodule', 'init'
|
|
}
|
|
println "Executed submoduleInit!"
|
|
}
|
|
}
|
|
// Updates the initialized submodules in Git.
|
|
tasks.register('subModuleUpdate') {
|
|
dependsOn 'submoduleInit'
|
|
doLast {
|
|
exec {
|
|
workingDir "../"
|
|
executable 'git'
|
|
args 'submodule', 'update', '--remote'
|
|
}
|
|
println "Executed subModuleUpdate!"
|
|
}
|
|
}
|
|
|
|
// Copies the external components to the Core resource folder.
|
|
tasks.register('externalComponentsCopy', Copy) {
|
|
dependsOn 'externalComponentsValidate'
|
|
from(externalResourceComponents + '/orc') {
|
|
include '**/*'
|
|
}
|
|
from(externalResourceComponents) {
|
|
include 'LICENSE'
|
|
include 'README.md'
|
|
}
|
|
into externalComponentsPath
|
|
exclude '**/*.bak'
|
|
includeEmptyDirs = false
|
|
eachFile { details ->
|
|
println "Copying $details.sourcePath to $details.path ..."
|
|
}
|
|
}
|
|
// Deletes the external components resource folder.
|
|
tasks.register('externalComponentsDelete', Delete) {
|
|
delete fileTree(externalComponentsPath)
|
|
}
|
|
// Validates the external components resource folder. If it is a Git project, then
|
|
// calls the submodule updates to fetch the latest submodules.
|
|
tasks.register('externalComponentsValidate') {
|
|
File dir = project.file(externalResourceComponents + '/orc') as File
|
|
println "Validating external components at ${dir}..."
|
|
File gitDir = project.file('../.git') as File
|
|
if (!dir.exists()) {
|
|
def message = "The component database is now a submodule, and must be included into " +
|
|
"this project to compile and run the app.\n" +
|
|
"\n";
|
|
if (gitDir.exists()) {
|
|
message +="If you retrieved this code by cloning the openrocket repository, " +
|
|
"the Gradle build will initialize the submodule if missing.\n" +
|
|
"\n" +
|
|
"You can also manually initialize and update the submodule from the command line\n" +
|
|
"% git submodule init\n" +
|
|
"% git submodule update --remote\n" +
|
|
"\n";
|
|
println message
|
|
dependsOn subModuleUpdate
|
|
} else {
|
|
message += "If you retrieved this code by downloading and uncompressing a zip file,\n" +
|
|
"Download the code from https://github.com/openrocket/openrocket-database and uncompress it.\n" +
|
|
"Copy the files and directories under openrocket-database-master into ''./core/${externalResourceComponents}''\n" +
|
|
"\n";
|
|
println message
|
|
throw new GradleException('Invalid external component resources.')
|
|
}
|
|
} else {
|
|
println "Found external components"
|
|
}
|
|
}
|
|
|
|
clean.dependsOn([externalComponentsDelete])
|
|
//compileJava.dependsOn([externalComponentsCopy])
|
|
processResources.dependsOn([externalComponentsCopy])
|
|
processResources.dependsOn([copyReadmeMain])
|
|
//processResources.dependsOn([serializeEnginesValidate])
|