mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-10-21 14:56:44 -04:00

Extend CI workflow to build for both `x86_64` and `aarch64` architectures: - Add ARM variants for Ubuntu and macOS in the build matrix - Skip tests on `aarch64` builds with `-x test` flag as JavaFX 21.x.x doesn't currently support the ARM64 architecture - Update artifact naming to include architecture identifiers - Configure architecture-specific build paths and release outputs This change enables native builds for ARM-based systems like Apple Silicon Macs and ARM servers, improving performance for users on these platforms while maintaining full test coverage on `x86_64` where supported. Make localnet cache OS-specific Prevent Error: Failed to CreateArtifact: Received non-retryable error: Failed request: (409) Conflict: an artifact with this name already exists on the workflow run Add a warning about `linux/aarch64` tests being skipped Simplify GitHub Actions workflow conditions Replace verbose condition syntax with simpler `runner.os` expressions to improve readability and maintainability. This change: - Uses `runner.os` instead of specific `matrix.os` version strings - Removes unnecessary `${{ }}` expression wrappers in if conditions - Consolidates OS-specific conditions (e.g. `ubuntu-22.04` or `ubuntu-22.04-arm`) into simpler checks (`runner.os == 'Linux'`) Fix JavaFX loading on Mac ARM64 architecture JavaFX 21.0.2 supports Mac ARM64 (Apple Silicon) but was failing to load with `UnsatisfiedLinkError` because the build system wasn't detecting ARM architecture properly. This change allows the build system to correctly identify Mac ARM64 systems and use the appropriate JavaFX libraries, resolving the compatibility issues when running on Apple Silicon Macs. Split Build and Package Installer steps Cleaner CI output, split Build and Package installer step into two steps
956 lines
42 KiB
Groovy
956 lines
42 KiB
Groovy
import org.apache.tools.ant.taskdefs.condition.Os
|
|
import org.gradle.internal.logging.ConsoleRenderer
|
|
|
|
buildscript {
|
|
repositories {
|
|
gradlePluginPortal()
|
|
}
|
|
dependencies {
|
|
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.17'
|
|
classpath 'com.google.gradle:osdetector-gradle-plugin:1.7.3'
|
|
classpath 'com.github.johnrengelman:shadow:8.1.1'
|
|
classpath 'org.springframework.boot:spring-boot-gradle-plugin:3.2.3'
|
|
classpath 'com.gradle:gradle-enterprise-gradle-plugin:3.16.1' // added for windows build verification-metadata.xml error
|
|
}
|
|
}
|
|
|
|
configure(rootProject) {
|
|
// remove the 'haveno-*' scripts and 'lib' dir generated by the 'installDist' task
|
|
task clean {
|
|
doLast {
|
|
delete fileTree(dir: rootProject.projectDir, include: 'haveno-*'), 'lib'
|
|
}
|
|
}
|
|
}
|
|
|
|
configure(subprojects) {
|
|
apply plugin: 'java'
|
|
apply plugin: 'com.google.osdetector'
|
|
// Apply the jacoco plugin to add support for test coverage
|
|
apply plugin: 'jacoco'
|
|
apply plugin: 'jacoco-report-aggregation'
|
|
apply plugin: 'checkstyle'
|
|
|
|
sourceCompatibility = JavaVersion.VERSION_21
|
|
|
|
ext { // in alphabetical order
|
|
bcVersion = '1.63'
|
|
bitcoinjVersion = '2a80db4'
|
|
codecVersion = '1.13'
|
|
cowwocVersion = '1.2'
|
|
easybindVersion = '1.0.3'
|
|
easyVersion = '4.0.1'
|
|
findbugsVersion = '3.0.2'
|
|
firebaseVersion = '6.2.0'
|
|
fontawesomefxVersion = '8.0.0'
|
|
fontawesomefxCommonsVersion = '9.1.2'
|
|
fontawesomefxMaterialdesignfontVersion = '2.0.26-9.1.2'
|
|
grpcVersion = '1.42.1'
|
|
gsonVersion = '2.8.5'
|
|
guavaVersion = '32.1.1-jre'
|
|
guiceVersion = '7.0.0'
|
|
moneroJavaVersion = '0.8.38'
|
|
httpclient5Version = '5.0'
|
|
hamcrestVersion = '2.2'
|
|
httpclientVersion = '4.5.12'
|
|
httpcoreVersion = '4.4.13'
|
|
ioVersion = '2.6'
|
|
jacksonVersion = '2.12.1'
|
|
javafxVersion = '21.0.2'
|
|
javaxAnnotationVersion = '1.2'
|
|
jcsvVersion = '1.4.0'
|
|
jetbrainsAnnotationsVersion = '13.0'
|
|
jfoenixVersion = '9.0.10'
|
|
joptVersion = '5.0.4'
|
|
jsonsimpleVersion = '1.1.1'
|
|
jsonrpc4jVersion = '1.6.0.bisq.1'
|
|
jupiterVersion = '5.9.2'
|
|
kotlinVersion = '1.3.41'
|
|
langVersion = '3.11'
|
|
logbackVersion = '1.1.11'
|
|
loggingVersion = '1.2'
|
|
lombokVersion = '1.18.30'
|
|
mockitoVersion = '5.10.0'
|
|
netlayerVersion = 'd9c60be46d' // Tor browser version 14.0.7 and tor binary version: 0.4.8.14
|
|
protobufVersion = '3.19.1'
|
|
protocVersion = protobufVersion
|
|
pushyVersion = '0.13.2'
|
|
qrgenVersion = '1.3'
|
|
slf4jVersion = '1.7.30'
|
|
sparkVersion = '2.5.2'
|
|
|
|
def osName = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os
|
|
def osArch = System.getProperty("os.arch").toLowerCase()
|
|
os = (osName == 'mac' && (osArch.contains('aarch64') || osArch.contains('arm'))) ? 'mac-aarch64' : osName
|
|
}
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
//mavenLocal()
|
|
maven { url 'https://jitpack.io' }
|
|
maven { url 'https://mvnrepository.com' }
|
|
}
|
|
|
|
tasks.withType(JavaCompile) {
|
|
options.encoding = 'UTF-8'
|
|
}
|
|
|
|
checkstyle {
|
|
toolVersion = '10.8.1'
|
|
// https://raw.githubusercontent.com/checkstyle/checkstyle/checkstyle-10.8.1/src/main/resources/google_checks.xml
|
|
configFile = rootProject.file("$rootDir/config/checkstyle/checkstyle.xml")
|
|
}
|
|
|
|
tasks.withType(Checkstyle) {
|
|
minHeapSize.set('200m')
|
|
maxHeapSize.set('1g')
|
|
}
|
|
|
|
jacoco {
|
|
toolVersion = "0.8.10"
|
|
reportsDirectory = file("$rootDir/build/reports/jacoco")
|
|
}
|
|
|
|
test.finalizedBy {
|
|
testCodeCoverageReport {
|
|
// tests are required to run before generating the report
|
|
reports {
|
|
xml.required.set(true)
|
|
html.required.set(false)
|
|
}
|
|
}
|
|
}
|
|
|
|
test {
|
|
useJUnitPlatform()
|
|
}
|
|
}
|
|
|
|
configure([project(':cli'),
|
|
project(':daemon'),
|
|
project(':desktop'),
|
|
project(':monitor'),
|
|
project(':relay'),
|
|
project(':seednode'),
|
|
project(':statsnode'),
|
|
project(':inventory'),
|
|
project(':apitest')]) {
|
|
|
|
apply plugin: 'application'
|
|
|
|
build.dependsOn installDist
|
|
installDist.destinationDir = file('build/app')
|
|
distZip.enabled = false
|
|
|
|
// the 'installDist' and 'startScripts' blocks below configure haveno executables to put
|
|
// generated shell scripts in the root project directory, such that users can easily
|
|
// discover and invoke e.g. ./haveno-desktop, ./haveno-seednode, etc.
|
|
// See https://stackoverflow.com/q/46327736 for details.
|
|
|
|
installDist {
|
|
doLast {
|
|
// copy generated shell scripts, e.g. `haveno-desktop` directly to the project
|
|
// root directory for discoverability and ease of use
|
|
|
|
copy {
|
|
from "$destinationDir/bin"
|
|
into rootProject.projectDir
|
|
}
|
|
// copy libs required for generated shell script classpaths to 'lib' dir under
|
|
// the project root directory
|
|
copy {
|
|
from "$destinationDir/lib"
|
|
into "${rootProject.projectDir}/lib"
|
|
}
|
|
|
|
// edit generated shell scripts such that they expect to be executed in the
|
|
// project root dir as opposed to a 'bin' subdirectory
|
|
if (osdetector.os == 'windows') {
|
|
def windowsScriptFile = file("${rootProject.projectDir}/haveno-${applicationName}.bat")
|
|
windowsScriptFile.text = windowsScriptFile.text.replace(
|
|
'set APP_HOME=%DIRNAME%..', 'set APP_HOME=%DIRNAME%')
|
|
|
|
if (applicationName == 'desktop') {
|
|
windowsScriptFile.text = windowsScriptFile.text.replace(
|
|
'DEFAULT_JVM_OPTS=', 'DEFAULT_JVM_OPTS=-XX:MaxRAM=4g ' +
|
|
'--add-opens=javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED ' +
|
|
'--add-opens=javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED ' +
|
|
'--add-opens=java.base/java.lang.reflect=ALL-UNNAMED ' +
|
|
'--add-opens=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED')
|
|
}
|
|
}
|
|
else {
|
|
def unixScriptFile = file("${rootProject.projectDir}/haveno-$applicationName")
|
|
unixScriptFile.text = unixScriptFile.text.replace(
|
|
'APP_HOME=$( cd "${APP_HOME:-./}.." > /dev/null && pwd -P ) || exit', 'APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit')
|
|
|
|
if (applicationName == 'desktop') {
|
|
unixScriptFile.text = unixScriptFile.text.replace(
|
|
'DEFAULT_JVM_OPTS=""', 'DEFAULT_JVM_OPTS="-XX:MaxRAM=4g ' +
|
|
'--add-opens=javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED ' +
|
|
'--add-opens=javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED ' +
|
|
'--add-opens=java.base/java.lang.reflect=ALL-UNNAMED ' +
|
|
'--add-opens=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED"')
|
|
}
|
|
}
|
|
|
|
if (applicationName == 'apitest') {
|
|
// Pass the logback config file as a system property to avoid chatty
|
|
// logback startup due to multiple logback.xml files in the classpath
|
|
// (:daemon & :cli).
|
|
def script = file("${rootProject.projectDir}/haveno-$applicationName")
|
|
script.text = script.text.replace(
|
|
'DEFAULT_JVM_OPTS=""', 'DEFAULT_JVM_OPTS="' +
|
|
'-Dlogback.configurationFile=apitest/build/resources/main/logback.xml"')
|
|
}
|
|
|
|
if (osdetector.os != 'windows')
|
|
delete fileTree(dir: rootProject.projectDir, include: 'haveno-*.bat')
|
|
else
|
|
delete fileTree(dir: rootProject.projectDir, include: 'haveno-*', exclude: '*.bat')
|
|
}
|
|
}
|
|
|
|
startScripts {
|
|
// rename scripts from, e.g. `desktop` to `haveno-desktop`
|
|
applicationName = "haveno-$applicationName"
|
|
}
|
|
}
|
|
|
|
configure(project(':proto')) {
|
|
apply plugin: 'com.google.protobuf'
|
|
|
|
dependencies {
|
|
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
compileOnly "javax.annotation:javax.annotation-api:$javaxAnnotationVersion"
|
|
compileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
implementation "ch.qos.logback:logback-classic:$logbackVersion"
|
|
implementation "ch.qos.logback:logback-core:$logbackVersion"
|
|
implementation "com.google.guava:guava:$guavaVersion"
|
|
implementation "com.google.protobuf:protobuf-java:$protobufVersion"
|
|
implementation "org.slf4j:slf4j-api:$slf4jVersion"
|
|
implementation("io.grpc:grpc-protobuf:$grpcVersion") {
|
|
exclude(module: 'animal-sniffer-annotations')
|
|
exclude(module: 'guava')
|
|
}
|
|
implementation("io.grpc:grpc-stub:$grpcVersion") {
|
|
exclude(module: 'animal-sniffer-annotations')
|
|
exclude(module: 'guava')
|
|
}
|
|
}
|
|
|
|
sourceSets.main.java.srcDirs += [
|
|
'build/generated/source/proto/main/grpc',
|
|
'build/generated/source/proto/main/java'
|
|
]
|
|
|
|
protobuf {
|
|
protoc {
|
|
artifact = "com.google.protobuf:protoc:${protocVersion}"
|
|
}
|
|
plugins {
|
|
grpc {
|
|
artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
|
|
}
|
|
}
|
|
generateProtoTasks {
|
|
all()*.plugins { grpc {} }
|
|
}
|
|
}
|
|
}
|
|
|
|
configure(project(':assets')) {
|
|
dependencies {
|
|
implementation("com.github.bisq-network:bitcoinj:$bitcoinjVersion") {
|
|
exclude(module: 'bcprov-jdk15on')
|
|
exclude(module: 'guava')
|
|
exclude(module: 'jsr305')
|
|
exclude(module: 'okhttp')
|
|
exclude(module: 'okio')
|
|
exclude(module: 'protobuf-java')
|
|
exclude(module: 'slf4j-api')
|
|
}
|
|
implementation "com.google.guava:guava:$guavaVersion"
|
|
implementation "org.apache.commons:commons-lang3:$langVersion"
|
|
implementation "org.slf4j:slf4j-api:$slf4jVersion"
|
|
testImplementation "org.hamcrest:hamcrest:$hamcrestVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-api:$jupiterVersion"
|
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jupiterVersion"
|
|
}
|
|
}
|
|
|
|
|
|
configure(project(':common')) {
|
|
dependencies {
|
|
implementation project(':proto')
|
|
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
compileOnly "javax.annotation:javax.annotation-api:$javaxAnnotationVersion"
|
|
compileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
implementation "ch.qos.logback:logback-classic:$logbackVersion"
|
|
implementation "ch.qos.logback:logback-core:$logbackVersion"
|
|
implementation("com.github.bisq-network:bitcoinj:$bitcoinjVersion") {
|
|
exclude(module: 'jsr305')
|
|
exclude(module: 'slf4j-api')
|
|
exclude(module: 'guava')
|
|
exclude(module: 'protobuf-java')
|
|
exclude(module: 'bcprov-jdk15on')
|
|
exclude(module: 'okhttp')
|
|
exclude(module: 'okio')
|
|
}
|
|
implementation "com.google.code.findbugs:jsr305:$findbugsVersion"
|
|
implementation "com.google.code.gson:gson:$gsonVersion"
|
|
implementation "com.google.guava:guava:$guavaVersion"
|
|
implementation("com.google.inject:guice:$guiceVersion") {
|
|
exclude(module: 'guava')
|
|
}
|
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion"
|
|
implementation "com.google.protobuf:protobuf-java:$protobufVersion"
|
|
implementation "commons-io:commons-io:$ioVersion"
|
|
implementation "net.sf.jopt-simple:jopt-simple:$joptVersion"
|
|
implementation "org.apache.commons:commons-lang3:$langVersion"
|
|
implementation "org.bouncycastle:bcpg-jdk15on:$bcVersion"
|
|
implementation "org.jetbrains:annotations:$jetbrainsAnnotationsVersion"
|
|
implementation "org.slf4j:slf4j-api:$slf4jVersion"
|
|
testImplementation "org.hamcrest:hamcrest:$hamcrestVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-api:$jupiterVersion"
|
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jupiterVersion"
|
|
runtimeOnly("io.grpc:grpc-netty-shaded:$grpcVersion") {
|
|
exclude(module: 'guava')
|
|
exclude(module: 'animal-sniffer-annotations')
|
|
}
|
|
|
|
// override transitive dependency and use latest version from bisq
|
|
implementation(group: 'com.github.bisq-network', name: 'jtorctl') { version { strictly "[b2a172f44edcd8deaa5ed75d936dcbb007f0d774]" } }
|
|
implementation "org.openjfx:javafx-base:$javafxVersion:$os"
|
|
implementation "org.openjfx:javafx-graphics:$javafxVersion:$os"
|
|
}
|
|
}
|
|
|
|
configure(project(':p2p')) {
|
|
dependencies {
|
|
implementation project(':proto')
|
|
implementation project(':common')
|
|
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
compileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
implementation "com.google.guava:guava:$guavaVersion"
|
|
implementation "com.google.protobuf:protobuf-java:$protobufVersion"
|
|
implementation "org.fxmisc.easybind:easybind:$easybindVersion"
|
|
implementation "org.slf4j:slf4j-api:$slf4jVersion"
|
|
implementation "org.apache.commons:commons-lang3:$langVersion"
|
|
implementation("com.github.haveno-dex.netlayer:tor.external:$netlayerVersion") {
|
|
exclude(module: 'slf4j-api')
|
|
}
|
|
implementation("com.github.haveno-dex.netlayer:tor.native:$netlayerVersion") {
|
|
exclude(module: 'slf4j-api')
|
|
}
|
|
implementation("com.github.bisq-network:bitcoinj:$bitcoinjVersion") {
|
|
exclude(module: 'bcprov-jdk15on')
|
|
exclude(module: 'guava')
|
|
exclude(module: 'jsr305')
|
|
exclude(module: 'okhttp')
|
|
exclude(module: 'okio')
|
|
exclude(module: 'protobuf-java')
|
|
exclude(module: 'slf4j-api')
|
|
}
|
|
implementation("com.google.inject:guice:$guiceVersion") {
|
|
exclude(module: 'guava')
|
|
}
|
|
implementation("org.apache.httpcomponents:httpclient:$httpclientVersion") {
|
|
exclude(module: 'commons-codec')
|
|
}
|
|
testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
testCompileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-api:$jupiterVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-params:$jupiterVersion"
|
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jupiterVersion"
|
|
testImplementation "ch.qos.logback:logback-classic:$logbackVersion"
|
|
testImplementation "ch.qos.logback:logback-core:$logbackVersion"
|
|
testImplementation "org.apache.commons:commons-lang3:$langVersion"
|
|
testImplementation("org.mockito:mockito-core:$mockitoVersion")
|
|
testImplementation("org.mockito:mockito-junit-jupiter:$mockitoVersion")
|
|
|
|
implementation "org.openjfx:javafx-base:$javafxVersion:$os"
|
|
implementation "org.openjfx:javafx-graphics:$javafxVersion:$os"
|
|
}
|
|
}
|
|
|
|
configure(project(':core')) {
|
|
dependencies {
|
|
implementation project(':proto')
|
|
implementation project(':assets')
|
|
implementation project(':common')
|
|
implementation project(':p2p')
|
|
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
compileOnly "javax.annotation:javax.annotation-api:$javaxAnnotationVersion"
|
|
compileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
implementation "ch.qos.logback:logback-classic:$logbackVersion"
|
|
implementation "ch.qos.logback:logback-core:$logbackVersion"
|
|
implementation "com.fasterxml.jackson.core:jackson-core:$jacksonVersion"
|
|
implementation "com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion"
|
|
implementation "com.google.code.findbugs:jsr305:$findbugsVersion"
|
|
implementation "com.google.code.gson:gson:$gsonVersion"
|
|
implementation "com.google.guava:guava:$guavaVersion"
|
|
implementation "com.google.protobuf:protobuf-java:$protobufVersion"
|
|
implementation "commons-codec:commons-codec:$codecVersion"
|
|
implementation "commons-io:commons-io:$ioVersion"
|
|
implementation "net.sf.jopt-simple:jopt-simple:$joptVersion"
|
|
implementation "org.apache.commons:commons-lang3:$langVersion"
|
|
implementation "org.apache.httpcomponents:httpcore:$httpcoreVersion"
|
|
implementation "org.fxmisc.easybind:easybind:$easybindVersion"
|
|
implementation "org.jetbrains:annotations:$jetbrainsAnnotationsVersion"
|
|
implementation "org.slf4j:slf4j-api:$slf4jVersion"
|
|
implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") {
|
|
exclude(module: 'jackson-annotations')
|
|
}
|
|
implementation("com.github.haveno-dex.netlayer:tor.native:$netlayerVersion") {
|
|
exclude(module: 'slf4j-api')
|
|
}
|
|
implementation("com.github.haveno-dex.netlayer:tor.external:$netlayerVersion") {
|
|
exclude(module: 'slf4j-api')
|
|
}
|
|
implementation("com.github.bisq-network:bitcoinj:$bitcoinjVersion") {
|
|
exclude(module: 'bcprov-jdk15on')
|
|
exclude(module: 'guava')
|
|
exclude(module: 'jsr305')
|
|
exclude(module: 'okhttp')
|
|
exclude(module: 'okio')
|
|
exclude(module: 'protobuf-java')
|
|
exclude(module: 'slf4j-api')
|
|
}
|
|
implementation("com.github.bisq-network:jsonrpc4j:$jsonrpc4jVersion") {
|
|
exclude(module: 'base64')
|
|
exclude(module: 'httpcore-nio')
|
|
}
|
|
implementation("com.google.inject:guice:$guiceVersion") {
|
|
exclude(module: 'guava')
|
|
}
|
|
implementation("org.apache.httpcomponents:httpclient:$httpclientVersion") {
|
|
exclude(module: 'commons-codec')
|
|
}
|
|
testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
testCompileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
testImplementation "com.natpryce:make-it-easy:$easyVersion"
|
|
testImplementation "org.hamcrest:hamcrest:$hamcrestVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-api:$jupiterVersion"
|
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jupiterVersion"
|
|
testImplementation "org.mockito:mockito-core:$mockitoVersion"
|
|
|
|
implementation "org.openjfx:javafx-base:$javafxVersion:$os"
|
|
implementation "org.openjfx:javafx-graphics:$javafxVersion:$os"
|
|
implementation("io.github.woodser:monero-java:$moneroJavaVersion") {
|
|
exclude(module: 'jackson-core')
|
|
exclude(module: 'jackson-annotations')
|
|
exclude(module: 'jackson-databind')
|
|
exclude(module: 'bcprov-jdk15on')
|
|
exclude(group: 'org.slf4j', module: 'slf4j-simple')
|
|
}
|
|
}
|
|
|
|
test {
|
|
systemProperty 'jdk.attach.allowAttachSelf', true
|
|
}
|
|
|
|
task generateKeypairs(type: JavaExec) {
|
|
mainClass = 'haveno.core.util.GenerateKeyPairs'
|
|
classpath = sourceSets.main.runtimeClasspath
|
|
}
|
|
|
|
task havenoDeps {
|
|
doLast {
|
|
// get monero binaries download url
|
|
Map moneroBinaries = [
|
|
'linux-x86_64' : 'https://github.com/haveno-dex/monero/releases/download/release7/monero-bins-haveno-linux-x86_64.tar.gz',
|
|
'linux-x86_64-sha256' : '713d64ff6423add0d065d9dfbf8a120dfbf3995d4b2093f8235b4da263d8a89c',
|
|
'linux-aarch64' : 'https://github.com/haveno-dex/monero/releases/download/release7/monero-bins-haveno-linux-aarch64.tar.gz',
|
|
'linux-aarch64-sha256' : '332dcc6a5d7eec754c010a1f893f81656be1331b847b06e9be69293b456f67cc',
|
|
'mac' : 'https://github.com/haveno-dex/monero/releases/download/release7/monero-bins-haveno-mac.tar.gz',
|
|
'mac-sha256' : '1c5bcd23373132528634352e604c1d732a73c634f3c77314fae503c6d23e10b0',
|
|
'windows' : 'https://github.com/haveno-dex/monero/releases/download/release7/monero-bins-haveno-windows.zip',
|
|
'windows-sha256' : '3d57b980e0208a950fd795f442d9e087b5298a914b0bd96fec431188b5ab0dad'
|
|
]
|
|
|
|
String osKey
|
|
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
|
osKey = 'windows'
|
|
} else if (Os.isFamily(Os.FAMILY_MAC)) {
|
|
osKey = 'mac'
|
|
} else {
|
|
String architecture = System.getProperty("os.arch").toLowerCase()
|
|
if (architecture.contains('aarch64') || architecture.contains('arm')) {
|
|
osKey = 'linux-aarch64'
|
|
} else {
|
|
osKey = 'linux-x86_64'
|
|
}
|
|
}
|
|
|
|
String moneroDownloadUrl = moneroBinaries[osKey]
|
|
String moneroSHA256Hash = moneroBinaries[osKey + '-sha256']
|
|
String moneroArchiveFileName = moneroDownloadUrl.tokenize('/').last()
|
|
String localnetDirName = '.localnet'
|
|
File localnetDir = new File(project.rootDir, localnetDirName)
|
|
localnetDir.mkdirs()
|
|
File moneroArchiveFile = new File(localnetDir, moneroArchiveFileName)
|
|
ext.downloadAndVerifyDependencies(moneroDownloadUrl, moneroSHA256Hash, moneroArchiveFile)
|
|
|
|
// extract if dependencies are missing or if archive was updated
|
|
File monerodFile
|
|
File moneroRpcFile
|
|
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
|
monerodFile = new File(localnetDir, 'monerod.exe')
|
|
moneroRpcFile = new File(localnetDir, 'monero-wallet-rpc.exe')
|
|
} else {
|
|
monerodFile = new File(localnetDir, 'monerod')
|
|
moneroRpcFile = new File(localnetDir, 'monero-wallet-rpc')
|
|
}
|
|
if (ext.dependencyDownloadedAndVerified || !monerodFile.exists() || !moneroRpcFile.exists()) {
|
|
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
|
ext.extractArchiveZip(moneroArchiveFile, localnetDir)
|
|
} else {
|
|
ext.extractArchiveTarGz(moneroArchiveFile, localnetDir)
|
|
}
|
|
}
|
|
|
|
// add the current platform's monero dependencies into the resources folder for installation
|
|
copy {
|
|
from "${monerodFile}"
|
|
into "${project(':core').projectDir}/src/main/resources/bin"
|
|
}
|
|
copy {
|
|
from "${moneroRpcFile}"
|
|
into "${project(':core').projectDir}/src/main/resources/bin"
|
|
}
|
|
}
|
|
|
|
ext.extractArchiveTarGz = { File tarGzFile, File destinationDir ->
|
|
println "Extracting tar.gz ${tarGzFile}"
|
|
// Gradle's tar extraction preserves permissions (crucial for jpackage to function correctly)
|
|
copy {
|
|
from tarTree(resources.gzip(tarGzFile))
|
|
into destinationDir
|
|
}
|
|
println "Extracted to ${destinationDir}"
|
|
}
|
|
|
|
ext.extractArchiveZip = { File zipFile, File destinationDir ->
|
|
println "Extracting zip ${zipFile}..."
|
|
ant.unzip(src: zipFile, dest: destinationDir)
|
|
println "Extracted to ${destinationDir}"
|
|
}
|
|
|
|
ext.downloadAndVerifyDependencies = { String archiveURL, String archiveSHA256, File destinationArchiveFile ->
|
|
ext.dependencyDownloadedAndVerified = false
|
|
|
|
// if archive exists, check to see if its already up to date
|
|
if (destinationArchiveFile.exists()) {
|
|
println "Verifying existing archive ${destinationArchiveFile}"
|
|
ant.archiveHash = archiveSHA256
|
|
ant.checksum(file: destinationArchiveFile, algorithm: 'SHA-256', property: '${archiveHash}', verifyProperty: 'existingHashMatches')
|
|
if (ant.properties['existingHashMatches'] != 'true') {
|
|
println "Existing archive does not match hash ${archiveSHA256}"
|
|
} else {
|
|
println "Existing archive matches hash"
|
|
return
|
|
}
|
|
}
|
|
|
|
// download archives
|
|
println "Downloading ${archiveURL}"
|
|
ant.get(src: archiveURL, dest: destinationArchiveFile)
|
|
println 'Download saved to ' + destinationArchiveFile
|
|
|
|
// verify checksum
|
|
println 'Verifying checksum for downloaded binary ...'
|
|
ant.archiveHash = archiveSHA256
|
|
ant.checksum(file: destinationArchiveFile, algorithm: 'SHA-256', property: '${archiveHash}', verifyProperty: 'downloadedHashMatches') // use a different verifyProperty name from existing verification or it will always fail
|
|
if (ant.properties['downloadedHashMatches'] != 'true') {
|
|
ant.fail('Checksum mismatch: Downloaded archive has a different checksum than expected')
|
|
}
|
|
println 'Checksum verified'
|
|
ext.dependencyDownloadedAndVerified = true
|
|
}
|
|
}
|
|
|
|
processResources.dependsOn havenoDeps // before both test and build
|
|
}
|
|
|
|
configure(project(':cli')) {
|
|
mainClassName = 'haveno.cli.CliMain'
|
|
|
|
dependencies {
|
|
implementation project(':proto')
|
|
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
compileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
implementation "ch.qos.logback:logback-classic:$logbackVersion"
|
|
implementation "ch.qos.logback:logback-core:$logbackVersion"
|
|
implementation "com.google.guava:guava:$guavaVersion"
|
|
implementation "com.google.protobuf:protobuf-java:$protobufVersion"
|
|
implementation "net.sf.jopt-simple:jopt-simple:$joptVersion"
|
|
implementation "org.slf4j:slf4j-api:$slf4jVersion"
|
|
implementation("io.grpc:grpc-core:$grpcVersion") {
|
|
exclude(module: 'animal-sniffer-annotations')
|
|
exclude(module: 'guava')
|
|
}
|
|
implementation("io.grpc:grpc-stub:$grpcVersion") {
|
|
exclude(module: 'animal-sniffer-annotations')
|
|
exclude(module: 'guava')
|
|
}
|
|
runtimeOnly("io.grpc:grpc-netty-shaded:$grpcVersion") {
|
|
exclude(module: 'animal-sniffer-annotations')
|
|
exclude(module: 'guava')
|
|
}
|
|
testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
testCompileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
testImplementation "org.bitbucket.cowwoc:diff-match-patch:$cowwocVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-api:$jupiterVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-params:$jupiterVersion"
|
|
testRuntimeOnly "javax.annotation:javax.annotation-api:$javaxAnnotationVersion"
|
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jupiterVersion"
|
|
}
|
|
}
|
|
|
|
configure(project(':desktop')) {
|
|
apply plugin: 'com.github.johnrengelman.shadow'
|
|
apply from: 'package/package.gradle'
|
|
|
|
version = '1.2.0-SNAPSHOT'
|
|
|
|
jar.manifest.attributes(
|
|
"Implementation-Title": project.name,
|
|
"Implementation-Version": version,
|
|
"CFBundleVersion": version)
|
|
|
|
mainClassName = 'haveno.desktop.app.HavenoAppMain'
|
|
|
|
tasks.withType(AbstractArchiveTask) {
|
|
preserveFileTimestamps = false
|
|
reproducibleFileOrder = true
|
|
}
|
|
|
|
sourceSets.main.resources.srcDirs += ['src/main/java'] // to copy fxml and css files
|
|
|
|
dependencies {
|
|
implementation project(':assets')
|
|
implementation project(':common')
|
|
implementation project(':proto')
|
|
implementation project(':p2p')
|
|
implementation project(':core')
|
|
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
compileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
implementation "ch.qos.logback:logback-classic:$logbackVersion"
|
|
implementation "ch.qos.logback:logback-core:$logbackVersion"
|
|
implementation "com.google.code.gson:gson:$gsonVersion"
|
|
implementation "com.google.guava:guava:$guavaVersion"
|
|
implementation "com.google.protobuf:protobuf-java:$protobufVersion"
|
|
implementation "com.googlecode.jcsv:jcsv:$jcsvVersion"
|
|
implementation "com.jfoenix:jfoenix:$jfoenixVersion"
|
|
implementation "commons-io:commons-io:$ioVersion"
|
|
implementation "de.jensd:fontawesomefx-commons:$fontawesomefxCommonsVersion"
|
|
implementation "de.jensd:fontawesomefx-materialdesignfont:$fontawesomefxMaterialdesignfontVersion"
|
|
implementation "de.jensd:fontawesomefx:$fontawesomefxVersion"
|
|
implementation "net.glxn:qrgen:$qrgenVersion"
|
|
implementation "org.apache.commons:commons-lang3:$langVersion"
|
|
implementation "org.bouncycastle:bcpg-jdk15on:$bcVersion"
|
|
implementation "org.fxmisc.easybind:easybind:$easybindVersion"
|
|
implementation "org.jetbrains:annotations:$jetbrainsAnnotationsVersion"
|
|
implementation "org.slf4j:slf4j-api:$slf4jVersion"
|
|
implementation("com.github.bisq-network:bitcoinj:$bitcoinjVersion") {
|
|
exclude(module: 'bcprov-jdk15on')
|
|
exclude(module: 'guava')
|
|
exclude(module: 'jsr305')
|
|
exclude(module: 'okhttp')
|
|
exclude(module: 'okio')
|
|
exclude(module: 'protobuf-java')
|
|
exclude(module: 'slf4j-api')
|
|
}
|
|
implementation("com.google.inject:guice:$guiceVersion") {
|
|
exclude(module: 'guava')
|
|
}
|
|
testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
testCompileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
testImplementation "com.natpryce:make-it-easy:$easyVersion"
|
|
testImplementation "org.mockito:mockito-core:$mockitoVersion"
|
|
testImplementation "org.hamcrest:hamcrest:$hamcrestVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-api:$jupiterVersion"
|
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jupiterVersion"
|
|
|
|
implementation("io.github.woodser:monero-java:$moneroJavaVersion") {
|
|
exclude(module: 'jackson-core')
|
|
exclude(module: 'jackson-annotations')
|
|
exclude(module: 'jackson-databind')
|
|
exclude(module: 'bcprov-jdk15on')
|
|
exclude(group: 'org.slf4j', module: 'slf4j-simple')
|
|
}
|
|
implementation "org.openjfx:javafx-controls:$javafxVersion:$os"
|
|
implementation "org.openjfx:javafx-fxml:$javafxVersion:$os"
|
|
implementation "org.openjfx:javafx-swing:$javafxVersion:$os"
|
|
implementation "org.openjfx:javafx-base:$javafxVersion:$os"
|
|
implementation "org.openjfx:javafx-graphics:$javafxVersion:$os"
|
|
}
|
|
|
|
test {
|
|
systemProperty 'jdk.attach.allowAttachSelf', true
|
|
}
|
|
}
|
|
|
|
|
|
configure(project(':monitor')) {
|
|
mainClassName = 'haveno.monitor.Monitor'
|
|
|
|
dependencies {
|
|
implementation project(':assets')
|
|
implementation project(':common')
|
|
implementation project(':core')
|
|
implementation project(':p2p')
|
|
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
compileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
implementation "ch.qos.logback:logback-classic:$logbackVersion"
|
|
implementation "ch.qos.logback:logback-core:$logbackVersion"
|
|
implementation "com.google.guava:guava:$guavaVersion"
|
|
implementation "org.slf4j:slf4j-api:$slf4jVersion"
|
|
implementation("com.github.haveno-dex.netlayer:tor.external:$netlayerVersion") {
|
|
exclude(module: 'slf4j-api')
|
|
}
|
|
implementation("com.github.haveno-dex.netlayer:tor.native:$netlayerVersion") {
|
|
exclude(module: 'slf4j-api')
|
|
}
|
|
implementation("com.google.inject:guice:$guiceVersion") {
|
|
exclude(module: 'guava')
|
|
}
|
|
testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
testCompileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-api:$jupiterVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-params:$jupiterVersion"
|
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jupiterVersion"
|
|
|
|
implementation "org.openjfx:javafx-base:$javafxVersion:$os"
|
|
implementation "org.openjfx:javafx-graphics:$javafxVersion:$os"
|
|
}
|
|
}
|
|
|
|
|
|
configure(project(':relay')) {
|
|
mainClassName = 'haveno.relay.RelayMain'
|
|
|
|
dependencies {
|
|
implementation project(':common')
|
|
implementation "ch.qos.logback:logback-classic:$logbackVersion"
|
|
implementation "ch.qos.logback:logback-core:$logbackVersion"
|
|
implementation("com.google.firebase:firebase-admin:$firebaseVersion") {
|
|
exclude(module: 'commons-logging')
|
|
exclude(module: 'grpc-auth')
|
|
exclude(module: 'httpclient')
|
|
exclude(module: 'httpcore')
|
|
}
|
|
implementation "com.sparkjava:spark-core:$sparkVersion"
|
|
implementation "com.turo:pushy:$pushyVersion"
|
|
implementation "commons-codec:commons-codec:$codecVersion"
|
|
implementation "io.grpc:grpc-auth:$grpcVersion"
|
|
}
|
|
}
|
|
|
|
|
|
configure(project(':seednode')) {
|
|
apply plugin: 'com.github.johnrengelman.shadow'
|
|
|
|
mainClassName = 'haveno.seednode.SeedNodeMain'
|
|
|
|
dependencies {
|
|
implementation project(':common')
|
|
implementation project(':p2p')
|
|
implementation project(':core')
|
|
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
compileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
implementation "com.google.guava:guava:$guavaVersion"
|
|
implementation "org.slf4j:slf4j-api:$slf4jVersion"
|
|
implementation("com.google.inject:guice:$guiceVersion") {
|
|
exclude(module: 'guava')
|
|
}
|
|
testImplementation "org.mockito:mockito-core:$mockitoVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-api:$jupiterVersion"
|
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jupiterVersion"
|
|
}
|
|
}
|
|
|
|
|
|
configure(project(':statsnode')) {
|
|
mainClassName = 'haveno.statistics.StatisticsMain'
|
|
|
|
dependencies {
|
|
implementation project(':common')
|
|
implementation project(':p2p')
|
|
implementation project(':core')
|
|
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
compileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
implementation "org.slf4j:slf4j-api:$slf4jVersion"
|
|
implementation("com.google.inject:guice:$guiceVersion") {
|
|
exclude(module: 'guava')
|
|
}
|
|
}
|
|
}
|
|
|
|
configure(project(':daemon')) {
|
|
mainClassName = 'haveno.daemon.app.HavenoDaemonMain'
|
|
|
|
dependencies {
|
|
implementation project(':proto')
|
|
implementation project(':common')
|
|
implementation project(':p2p')
|
|
implementation project(':core')
|
|
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
compileOnly "javax.annotation:javax.annotation-api:$javaxAnnotationVersion"
|
|
compileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
implementation "ch.qos.logback:logback-classic:$logbackVersion"
|
|
implementation "ch.qos.logback:logback-core:$logbackVersion"
|
|
implementation "com.google.code.gson:gson:$gsonVersion"
|
|
implementation "com.google.guava:guava:$guavaVersion"
|
|
implementation "com.google.protobuf:protobuf-java:$protobufVersion"
|
|
implementation "org.apache.commons:commons-lang3:$langVersion"
|
|
implementation "org.jetbrains:annotations:$jetbrainsAnnotationsVersion"
|
|
implementation "org.slf4j:slf4j-api:$slf4jVersion"
|
|
implementation("com.github.bisq-network:bitcoinj:$bitcoinjVersion") {
|
|
exclude(module: 'bcprov-jdk15on')
|
|
exclude(module: 'guava')
|
|
exclude(module: 'jsr305')
|
|
exclude(module: 'okhttp')
|
|
exclude(module: 'okio')
|
|
exclude(module: 'protobuf-java')
|
|
exclude(module: 'slf4j-api')
|
|
}
|
|
implementation("com.google.inject:guice:$guiceVersion") {
|
|
exclude(module: 'guava')
|
|
}
|
|
implementation("io.grpc:grpc-protobuf:$grpcVersion") {
|
|
exclude(module: 'animal-sniffer-annotations')
|
|
exclude(module: 'guava')
|
|
}
|
|
implementation("io.grpc:grpc-stub:$grpcVersion") {
|
|
exclude(module: 'animal-sniffer-annotations')
|
|
exclude(module: 'guava')
|
|
}
|
|
runtimeOnly("io.grpc:grpc-netty-shaded:$grpcVersion") {
|
|
exclude(module: 'animal-sniffer-annotations')
|
|
exclude(module: 'guava')
|
|
}
|
|
testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
testCompileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-api:$jupiterVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-params:$jupiterVersion"
|
|
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:$jupiterVersion")
|
|
|
|
implementation("io.github.woodser:monero-java:$moneroJavaVersion") {
|
|
exclude(module: 'jackson-core')
|
|
exclude(module: 'jackson-annotations')
|
|
exclude(module: 'jackson-databind')
|
|
exclude(module: 'bcprov-jdk15on')
|
|
exclude(group: 'org.slf4j', module: 'slf4j-simple')
|
|
}
|
|
implementation "org.openjfx:javafx-base:$javafxVersion:$os"
|
|
implementation "org.openjfx:javafx-graphics:$javafxVersion:$os"
|
|
}
|
|
}
|
|
|
|
configure(project(':inventory')) {
|
|
apply plugin: 'com.github.johnrengelman.shadow'
|
|
|
|
mainClassName = 'haveno.inventory.InventoryMonitorMain'
|
|
|
|
dependencies {
|
|
implementation project(':common')
|
|
implementation project(':p2p')
|
|
implementation project(':core')
|
|
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
compileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
implementation "ch.qos.logback:logback-classic:$logbackVersion"
|
|
implementation "ch.qos.logback:logback-core:$logbackVersion"
|
|
implementation "com.google.guava:guava:$guavaVersion"
|
|
implementation "com.sparkjava:spark-core:$sparkVersion"
|
|
implementation "org.jetbrains:annotations:$jetbrainsAnnotationsVersion"
|
|
implementation("com.google.inject:guice:$guiceVersion") {
|
|
exclude(module: 'guava')
|
|
}
|
|
}
|
|
}
|
|
|
|
configure(project(':apitest')) {
|
|
mainClassName = 'haveno.apitest.ApiTestMain'
|
|
|
|
// We have to disable the :apitest 'test' task by default because we do not want
|
|
// to interfere with normal builds. To run JUnit tests in this subproject:
|
|
// Run a normal build and install dao-setup files first, then run:
|
|
// 'gradle :apitest:test -DrunApiTests=true'
|
|
test.enabled = System.getProperty("runApiTests") == "true"
|
|
|
|
test {
|
|
outputs.upToDateWhen { false } // Don't use previously cached test outputs.
|
|
testLogging {
|
|
showStackTraces = true // Show full stack traces in the console.
|
|
exceptionFormat = "full"
|
|
// Show passed & failed tests, and anything printed to stderr by the tests in the console.
|
|
// Do not show skipped tests in the console; they are shown in the html report.
|
|
events "passed", "failed", "standardError"
|
|
}
|
|
|
|
afterSuite { desc, result ->
|
|
if (!desc.parent) {
|
|
println("${result.resultType} " +
|
|
"[${result.testCount} tests, " +
|
|
"${result.successfulTestCount} passed, " +
|
|
"${result.failedTestCount} failed, " +
|
|
"${result.skippedTestCount} skipped] html report contains skipped test info")
|
|
|
|
// Show report link if all tests passed in case you want to see more detail, stdout, skipped, etc.
|
|
if (result.resultType == TestResult.ResultType.SUCCESS) {
|
|
DirectoryReport htmlReport = getReports().getHtml()
|
|
String reportUrl = new ConsoleRenderer()
|
|
.asClickableFileUrl(htmlReport.getEntryPoint())
|
|
println("REPORT " + reportUrl)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation project(':proto')
|
|
implementation project(':common')
|
|
implementation project(':core')
|
|
implementation project(':seednode')
|
|
implementation project(':desktop')
|
|
implementation project(':daemon')
|
|
implementation project(':cli')
|
|
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
compileOnly "javax.annotation:javax.annotation-api:$javaxAnnotationVersion"
|
|
compileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
implementation "ch.qos.logback:logback-classic:$logbackVersion"
|
|
implementation "ch.qos.logback:logback-core:$logbackVersion"
|
|
implementation "com.google.code.gson:gson:$gsonVersion"
|
|
implementation "com.google.guava:guava:$guavaVersion"
|
|
implementation "com.google.protobuf:protobuf-java:$protobufVersion"
|
|
implementation "net.sf.jopt-simple:jopt-simple:$joptVersion"
|
|
implementation "org.apache.commons:commons-lang3:$langVersion"
|
|
implementation "org.slf4j:slf4j-api:$slf4jVersion"
|
|
implementation("com.github.bisq-network:bitcoinj:$bitcoinjVersion") {
|
|
exclude(module: 'bcprov-jdk15on')
|
|
exclude(module: 'guava')
|
|
exclude(module: 'jsr305')
|
|
exclude(module: 'okhttp')
|
|
exclude(module: 'okio')
|
|
exclude(module: 'protobuf-java')
|
|
exclude(module: 'slf4j-api')
|
|
}
|
|
implementation("io.grpc:grpc-protobuf:$grpcVersion") {
|
|
exclude(module: 'animal-sniffer-annotations')
|
|
exclude(module: 'guava')
|
|
}
|
|
implementation("io.grpc:grpc-stub:$grpcVersion") {
|
|
exclude(module: 'animal-sniffer-annotations')
|
|
exclude(module: 'guava')
|
|
}
|
|
testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
|
testCompileOnly "org.projectlombok:lombok:$lombokVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-api:$jupiterVersion"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-params:$jupiterVersion"
|
|
testRuntimeOnly "javax.annotation:javax.annotation-api:$javaxAnnotationVersion"
|
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jupiterVersion"
|
|
}
|
|
}
|
|
|