plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.10'
id 'com.palantir.git-version' version '0.14.0'
}
repositories {
mavenCentral()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
maven {
url "https://nexus.bedatadriven.com/content/groups/public"
}
}
String[] os = ["win", "mac", "linux"]
if (project.hasProperty('targetOs')) {
if ("windows" == targetOs) {
os = ["win"]
} else {
os = [targetOs]
}
}
def moduleSecurity = [
"--add-opens=javafx.controls/javafx.scene.control=ALL-UNNAMED",
"--add-opens=javafx.controls/javafx.scene.control.skin=ALL-UNNAMED",
"--add-opens=javafx.graphics/javafx.scene.text=ALL-UNNAMED",
"--add-opens=javafx.graphics/com.sun.javafx.css=ALL-UNNAMED",
"--add-opens=javafx.graphics/com.sun.javafx.text=ALL-UNNAMED",
"--add-exports=javafx.base/com.sun.javafx.event=ALL-UNNAMED",
"--add-exports=javafx.graphics/com.sun.javafx.application=ALL-UNNAMED",
"--add-exports=javafx.graphics/com.sun.javafx.geom=ALL-UNNAMED",
"--add-exports=javafx.graphics/com.sun.javafx.text=ALL-UNNAMED",
"--add-exports=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED",
"--add-exports=javafx.graphics/com.sun.javafx.scene.text=ALL-UNNAMED",
"--add-exports=javafx.graphics/com.sun.javafx.scene.traversal=ALL-UNNAMED",
]
javafx {
version = "17"
modules = ['javafx.controls', 'javafx.swing']
configuration = 'compileOnly'
}
dependencies {
def v_junit = '5.8.2'
def v_flexmark = '0.64.0'
def v_jackson = '2.13.3'
def v_batik = '1.14'
def v_wheatsheaf = '2.0.1'
implementation 'org.fxmisc.richtext:richtextfx:0.10.9'
implementation 'org.fxmisc.flowless:flowless:0.6.9'
implementation 'org.fxmisc.wellbehaved:wellbehavedfx:0.3.3'
implementation 'com.miglayout:miglayout-javafx:11.0'
implementation 'com.dlsc.preferencesfx:preferencesfx-core:11.9.0'
implementation "com.vladsch.flexmark:flexmark:${v_flexmark}"
implementation "com.vladsch.flexmark:flexmark-ext-definition:${v_flexmark}"
implementation "com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:${v_flexmark}"
implementation "com.vladsch.flexmark:flexmark-ext-superscript:${v_flexmark}"
implementation "com.vladsch.flexmark:flexmark-ext-tables:${v_flexmark}"
implementation "com.vladsch.flexmark:flexmark-ext-typographic:${v_flexmark}"
implementation "com.fasterxml.jackson.core:jackson-core:${v_jackson}"
implementation "com.fasterxml.jackson.core:jackson-databind:${v_jackson}"
implementation "com.fasterxml.jackson.core:jackson-annotations:${v_jackson}"
implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${v_jackson}"
implementation 'org.yaml:snakeyaml:1.30'
implementation 'com.ximpleware:vtd-xml:2.13.4'
implementation 'org.jsoup:jsoup:1.14.3'
implementation 'org.renjin:renjin-script-engine:3.5-beta76'
implementation "org.apache.xmlgraphics:batik-anim:${v_batik}"
implementation "org.apache.xmlgraphics:batik-awt-util:${v_batik}"
implementation "org.apache.xmlgraphics:batik-bridge:${v_batik}"
implementation "org.apache.xmlgraphics:batik-css:${v_batik}"
implementation "org.apache.xmlgraphics:batik-dom:${v_batik}"
implementation "org.apache.xmlgraphics:batik-ext:${v_batik}"
implementation "org.apache.xmlgraphics:batik-gvt:${v_batik}"
implementation "org.apache.xmlgraphics:batik-parser:${v_batik}"
implementation "org.apache.xmlgraphics:batik-script:${v_batik}"
implementation "org.apache.xmlgraphics:batik-svg-dom:${v_batik}"
implementation "org.apache.xmlgraphics:batik-svggen:${v_batik}"
implementation "org.apache.xmlgraphics:batik-transcoder:${v_batik}"
implementation "org.apache.xmlgraphics:batik-rasterizer:${v_batik}"
implementation "org.apache.xmlgraphics:batik-util:${v_batik}"
implementation "org.apache.xmlgraphics:batik-xml:${v_batik}"
implementation 'org.ahocorasick:ahocorasick:0.6.3'
implementation 'org.apache.commons:commons-configuration2:2.7'
implementation 'com.googlecode.juniversalchardet:juniversalchardet:1.0.3'
implementation 'javax.validation:validation-api:2.0.1.Final'
implementation 'org.greenrobot:eventbus-java:3.3.1'
implementation 'org.apache.commons:commons-configuration2:2.7'
implementation 'commons-beanutils:commons-beanutils:1.9.4'
implementation 'info.picocli:picocli:4.6.3'
implementation fileTree(include: ['**/*.jar'], dir: 'libs')
def fx = ['controls', 'graphics', 'fxml', 'swing']
fx.each { fxitem ->
os.each { ositem ->
runtimeOnly "org.openjfx:javafx-${fxitem}:${javafx.version}:${ositem}"
}
}
testImplementation "org.testfx:testfx-junit5:4.0.16-alpha"
testImplementation "org.junit.jupiter:junit-jupiter-api:${v_junit}"
testImplementation "org.junit.jupiter:junit-jupiter-params:${v_junit}"
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}
compileJava {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
def resourceDir = sourceSets.main.resources.srcDirs[0]
final Properties config = new Properties()
final File configFile = file("${resourceDir}/bootstrap.properties")
final FileInputStream configStream = new FileInputStream(configFile)
config.load(configStream)
configStream.close()
final String applicationName = config.get("application.title").toString().toLowerCase()
final String applicationClass = "com.${applicationName}.Launcher"
application {
mainClass.set(applicationClass)
applicationDefaultJvmArgs = moduleSecurity
}
version = gitVersion()
final File propertiesFile = new File("${resourceDir}/com/${applicationName}/app.properties")
propertiesFile.write("application.version=${version}")
jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
doFirst {
manifest {
attributes 'Main-Class': applicationClass
}
}
from {
(configurations.runtimeClasspath.findAll { !it.path.endsWith(".pom") }).collect {
it.isDirectory() ? it : zipTree(it)
}
}
archiveFileName = "${applicationName}.jar"
exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
}
distributions {
main {
distributionBaseName = applicationName
contents {
from { ['LICENSE.md', 'README.md'] }
into('images') {
from { 'images' }
}
}
}
}
test {
useJUnitPlatform()
doFirst {
jvmArgs = moduleSecurity
}
testLogging {
exceptionFormat = 'full'
}
}