mirror of
https://github.com/pgpainless/pgpainless.git
synced 2025-02-16 22:26:25 +01:00
106 lines
3.6 KiB
Groovy
106 lines
3.6 KiB
Groovy
// SPDX-FileCopyrightText: 2021 Paul Schaub <vanitasvitae@fsfe.org>
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
plugins {
|
|
id 'application'
|
|
id "com.github.johnrengelman.shadow" version "6.1.0"
|
|
id 'org.graalvm.buildtools.native' version '0.10.3'
|
|
}
|
|
def generatedVersionDir = "${buildDir}/generated-version"
|
|
|
|
sourceSets {
|
|
main {
|
|
output.dir(generatedVersionDir, builtBy: 'generateVersionProperties')
|
|
}
|
|
}
|
|
|
|
task generateVersionProperties {
|
|
doLast {
|
|
def propertiesFile = file "$generatedVersionDir/version.properties"
|
|
propertiesFile.parentFile.mkdirs()
|
|
propertiesFile.createNewFile()
|
|
// Instead of using a Properties object here, we directly write to the file
|
|
// since Properties adds a timestamp, ruining reproducibility
|
|
propertiesFile.write("version="+rootProject.version.toString())
|
|
}
|
|
}
|
|
processResources.dependsOn generateVersionProperties
|
|
|
|
dependencies {
|
|
|
|
testImplementation(project(":pgpainless-core"))
|
|
|
|
testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion"
|
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
|
|
// https://todd.ginsberg.com/post/testing-system-exit/
|
|
testImplementation 'com.ginsberg:junit5-system-exit:1.1.2'
|
|
|
|
// implementation "ch.qos.logback:logback-core:1.2.6"
|
|
// We want logback logging in tests and in the app
|
|
testImplementation "ch.qos.logback:logback-classic:$logbackVersion"
|
|
implementation "ch.qos.logback:logback-classic:$logbackVersion"
|
|
|
|
implementation(project(":pgpainless-sop"))
|
|
implementation "org.pgpainless:sop-java-picocli:$sopJavaVersion"
|
|
|
|
// https://mvnrepository.com/artifact/com.google.code.findbugs/jsr305
|
|
implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2'
|
|
}
|
|
|
|
mainClassName = 'org.pgpainless.cli.PGPainlessCLI'
|
|
|
|
application {
|
|
mainClass = mainClassName
|
|
}
|
|
/**
|
|
jar {
|
|
duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
|
|
manifest {
|
|
attributes 'Main-Class': "$mainClassName"
|
|
}
|
|
|
|
from {
|
|
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
|
|
} {
|
|
exclude "META-INF/*.SF"
|
|
exclude "META-INF/*.DSA"
|
|
exclude "META-INF/*.RSA"
|
|
}
|
|
}
|
|
*/
|
|
|
|
run {
|
|
// https://stackoverflow.com/questions/59445306/pipe-into-gradle-run
|
|
standardInput = System.in
|
|
// https://discuss.gradle.org/t/how-can-i-provide-command-line-args-to-application-started-with-gradle-run/6474/5
|
|
if (project.hasProperty("appArgs")) {
|
|
args Eval.me(appArgs)
|
|
}
|
|
}
|
|
|
|
graalvmNative {
|
|
binaries {
|
|
main {
|
|
imageName = "GraalVM-Native-pgpainless"
|
|
mainClass = "$mainClassName"
|
|
buildArgs.add("-O4")
|
|
buildArgs.add('-H:ConfigurationFileDirectories=../../../build/resources/main/META-INF/native-image/')
|
|
buildArgs.add('--no-fallback')
|
|
buildArgs.add('--verbose')
|
|
buildArgs.add('-H:+BuildReport')
|
|
buildArgs.add('-J-XshowSettings:vm')
|
|
buildArgs.add('--report-unsupported-elements-at-runtime')
|
|
buildArgs.add('-H:+ReportExceptionStackTraces')
|
|
buildArgs.add('--initialize-at-build-time=org.bouncycastle')
|
|
buildArgs.add('--initialize-at-build-time=org.bouncycastle.jce.provider.BouncyCastleProvider')
|
|
buildArgs.add('-H:ReflectionConfigurationFiles=../../../additional-native-metadata/reflection.json')
|
|
buildArgs.add('-H:ResourceConfigurationFiles=../../../additional-native-metadata/include-resources.json')
|
|
}
|
|
}
|
|
binaries.all {
|
|
buildArgs.add("--verbose")
|
|
}
|
|
}
|
|
|
|
// tasks."jar".dependsOn(":pgpainless-core:assemble", ":pgpainless-sop:assemble")
|