191 lines
7.5 KiB
Groovy
191 lines
7.5 KiB
Groovy
plugins {
|
|
id 'application'
|
|
id 'org.gradlex.extra-java-module-info' version '1.13.1'
|
|
id 'org.beryx.jlink' version '3.2.1'
|
|
}
|
|
|
|
def os = org.gradle.internal.os.OperatingSystem.current()
|
|
def releaseArch = System.getProperty('os.arch') == 'aarch64' ? 'aarch64' : 'x86_64'
|
|
|
|
group = 'com.sparrowwallet.frigate'
|
|
version = '1.5.3'
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
}
|
|
|
|
tasks.withType(AbstractArchiveTask).configureEach {
|
|
useFileSystemPermissions()
|
|
}
|
|
|
|
dependencies {
|
|
implementation(project(':drongo'))
|
|
implementation('org.duckdb:duckdb_jdbc:1.4.4.0')
|
|
implementation('com.google.guava:guava:33.5.0-jre')
|
|
implementation('com.google.code.gson:gson:2.13.2')
|
|
implementation('com.github.arteam:simple-json-rpc-core:1.3')
|
|
implementation('com.github.arteam:simple-json-rpc-client:1.3') {
|
|
exclude group: 'com.github.arteam', module: 'simple-json-rpc-core'
|
|
}
|
|
implementation('com.github.arteam:simple-json-rpc-server:1.3') {
|
|
exclude group: 'org.slf4j'
|
|
}
|
|
implementation('com.fasterxml.jackson.core:jackson-databind:2.21.1')
|
|
implementation('com.fasterxml.jackson.dataformat:jackson-dataformat-toml:2.21.1')
|
|
implementation('org.jcommander:jcommander:3.0')
|
|
implementation('org.zeromq:jeromq:0.6.0')
|
|
implementation ('org.slf4j:slf4j-api:2.0.17')
|
|
implementation ('ch.qos.logback:logback-classic:1.5.32') {
|
|
exclude group: 'org.slf4j'
|
|
}
|
|
testImplementation platform('org.junit:junit-bom:5.14.1')
|
|
testImplementation 'org.junit.jupiter:junit-jupiter'
|
|
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
|
|
}
|
|
|
|
test {
|
|
useJUnitPlatform()
|
|
}
|
|
|
|
application {
|
|
mainModule = 'com.sparrowwallet.frigate'
|
|
mainClass = 'com.sparrowwallet.frigate.Frigate'
|
|
|
|
applicationDefaultJvmArgs = ["-XX:+HeapDumpOnOutOfMemoryError",
|
|
"--enable-native-access=duckdb.jdbc,com.sparrowwallet.drongo"]
|
|
if(os.isMacOsX()) {
|
|
applicationDefaultJvmArgs += ["-Dapple.awt.UIElement=true"]
|
|
}
|
|
}
|
|
|
|
tasks.register('runCli', JavaExec) {
|
|
mainModule = 'com.sparrowwallet.frigate'
|
|
mainClass = 'com.sparrowwallet.frigate.cli.FrigateCli'
|
|
classpath = sourceSets.main.runtimeClasspath
|
|
jvmArgs = ["-XX:+HeapDumpOnOutOfMemoryError",
|
|
"--enable-native-access=duckdb.jdbc,com.sparrowwallet.drongo"]
|
|
}
|
|
|
|
jlink {
|
|
mergedModule {
|
|
requires 'java.xml'
|
|
requires 'java.logging'
|
|
}
|
|
|
|
def nativePlatform = os.isMacOsX() ? 'macos' : os.isWindows() ? 'windows' : 'linux'
|
|
def nativeArch = releaseArch == 'aarch64' ? 'arm64' : 'amd64'
|
|
def excludeGlobs = (['linux', 'macos', 'windows'].collectMany { osName ->
|
|
['amd64', 'arm64'].findResults { arch ->
|
|
(osName == nativePlatform && arch == nativeArch) ? null : "glob:/com.sparrowwallet.frigate/native/${osName}/${arch}/**"
|
|
}
|
|
} + ['glob:/com.sparrowwallet.merged.module/META-INF/*']).join(',')
|
|
def jlinkOptions = ['--strip-native-commands', '--strip-java-debug-attributes', '--compress', 'zip-6', '--no-header-files', '--no-man-pages', '--ignore-signing-information', '--exclude-files', '**.png', '--exclude-resources', excludeGlobs]
|
|
if(os.isMacOsX()) {
|
|
jlinkOptions += ['--add-modules', 'java.desktop']
|
|
}
|
|
options = jlinkOptions
|
|
launcher {
|
|
name = 'frigate'
|
|
jvmArgs = ["--enable-native-access=duckdb.jdbc,com.sparrowwallet.drongo"]
|
|
}
|
|
secondaryLauncher {
|
|
name = 'frigate-cli'
|
|
mainClass = 'com.sparrowwallet.frigate.cli.FrigateCli'
|
|
jvmArgs = ["--enable-native-access=duckdb.jdbc,com.sparrowwallet.drongo"]
|
|
}
|
|
jpackage {
|
|
imageName = os.isMacOsX() ? 'Frigate' : 'frigate'
|
|
installerName = imageName
|
|
appVersion = "${version}"
|
|
skipInstaller = !os.isLinux()
|
|
if(os.isWindows()) {
|
|
imageOptions = ['--win-console', '--resource-dir', 'src/main/deploy/package/windows/']
|
|
} else if(os.isMacOsX()) {
|
|
imageOptions = ['--icon', 'src/main/deploy/package/macos/frigate.icns', '--resource-dir', 'src/main/deploy/package/macos/', '--java-options', '-Dapple.awt.UIElement=true']
|
|
} else if(os.isLinux()) {
|
|
imageOptions = ['--resource-dir', 'src/main/deploy/package/linux/', '--icon', 'src/main/deploy/package/linux/frigate.png']
|
|
installerOptions = ['--linux-rpm-license-type', 'ASL 2.0', '--linux-deb-maintainer', 'mail@sparrowwallet.com']
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.jlink.finalizedBy('addUserWritePermission')
|
|
|
|
tasks.register('addUserWritePermission', Exec) {
|
|
if(os.isWindows()) {
|
|
commandLine 'icacls', layout.buildDirectory.dir('image/legal').get().toString(), '/grant', 'Users:(OI)(CI)F', '/T'
|
|
} else {
|
|
commandLine 'chmod', '-R', 'u+w', layout.buildDirectory.dir('image/legal').get().toString()
|
|
}
|
|
}
|
|
|
|
tasks.register('removeGroupWritePermission', Exec) {
|
|
commandLine 'chmod', '-R', 'g-w', layout.buildDirectory.dir('jpackage/frigate').get().toString()
|
|
}
|
|
|
|
tasks.register('packageZipDistribution', Zip) {
|
|
group = 'Other'
|
|
description = 'Packages a zip of the application image'
|
|
if(os.isWindows()) {
|
|
archiveFileName = "frigate-${version}-win-${releaseArch}.zip"
|
|
} else {
|
|
archiveFileName = "frigate-${version}-${releaseArch}.zip"
|
|
}
|
|
destinationDirectory = layout.buildDirectory.dir('jpackage')
|
|
preserveFileTimestamps = os.isMacOsX()
|
|
from(layout.buildDirectory.dir('jpackage')) {
|
|
include 'frigate/**'
|
|
include 'Frigate.app/**'
|
|
}
|
|
}
|
|
|
|
tasks.register('packageTarDistribution', Tar) {
|
|
group = 'Other'
|
|
description = 'Packages a tar.gz of the application image'
|
|
dependsOn removeGroupWritePermission
|
|
archiveFileName = "frigate-${version}-${releaseArch}.tar.gz"
|
|
destinationDirectory = layout.buildDirectory.dir('jpackage')
|
|
compression = Compression.GZIP
|
|
from(layout.buildDirectory.dir('jpackage')) {
|
|
include 'frigate/**'
|
|
}
|
|
}
|
|
|
|
extraJavaModuleInfo {
|
|
module('org.duckdb:duckdb_jdbc', 'duckdb.jdbc') {
|
|
exports('org.duckdb')
|
|
requires('java.sql')
|
|
}
|
|
module('com.github.arteam:simple-json-rpc-core', 'simple.json.rpc.core') {
|
|
exports('com.github.arteam.simplejsonrpc.core.annotation')
|
|
exports('com.github.arteam.simplejsonrpc.core.domain')
|
|
requires('com.fasterxml.jackson.core')
|
|
requires('com.fasterxml.jackson.annotation')
|
|
requires('com.fasterxml.jackson.databind')
|
|
requires('org.jetbrains.annotations')
|
|
}
|
|
module('com.github.arteam:simple-json-rpc-client', 'simple.json.rpc.client') {
|
|
exports('com.github.arteam.simplejsonrpc.client')
|
|
exports('com.github.arteam.simplejsonrpc.client.builder')
|
|
exports('com.github.arteam.simplejsonrpc.client.exception')
|
|
requires('com.fasterxml.jackson.core')
|
|
requires('com.fasterxml.jackson.databind')
|
|
requires('simple.json.rpc.core')
|
|
}
|
|
module('com.github.arteam:simple-json-rpc-server', 'simple.json.rpc.server') {
|
|
exports('com.github.arteam.simplejsonrpc.server')
|
|
requires('simple.json.rpc.core')
|
|
requires('com.google.common')
|
|
requires('org.slf4j')
|
|
requires('com.fasterxml.jackson.databind')
|
|
}
|
|
module('com.google.guava:listenablefuture|empty-to-avoid-conflict-with-guava', 'com.google.guava.listenablefuture')
|
|
module('com.google.code.findbugs:jsr305', 'com.google.code.findbugs.jsr305')
|
|
module('j2objc-annotations-2.8.jar', 'com.google.j2objc.j2objc.annotations', '2.8')
|
|
module('org.jcommander:jcommander', 'org.jcommander') {
|
|
exports('com.beust.jcommander')
|
|
}
|
|
module('eu.neilalexander:jnacl', 'jnacl') {
|
|
exports('com.neilalexander.jnacl.crypto')
|
|
}
|
|
} |