mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 16:47:31 -05:00
Updates gradle build system to address classes that are now hidden in Java 17 and no longer exported from the base modules. Updated build system to specifically call out JavaFX OS-specific libraries and target these to each of the OS-specific build products. Removes jcenter as a maven repo since it's now deprecated. Co-authored-by: Dennis Sheirer <dsheirer@github.com>
297 lines
11 KiB
Groovy
297 lines
11 KiB
Groovy
/*
|
|
*
|
|
* * ******************************************************************************
|
|
* * Copyright (C) 2014-2020 Dennis Sheirer
|
|
* *
|
|
* * This program is free software: you can redistribute it and/or modify
|
|
* * it under the terms of the GNU General Public License as published by
|
|
* * the Free Software Foundation, either version 3 of the License, or
|
|
* * (at your option) any later version.
|
|
* *
|
|
* * This program is distributed in the hope that it will be useful,
|
|
* * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* * GNU General Public License for more details.
|
|
* *
|
|
* * You should have received a copy of the GNU General Public License
|
|
* * along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
* * *****************************************************************************
|
|
*
|
|
*
|
|
*/
|
|
plugins {
|
|
id 'application'
|
|
id 'java'
|
|
id 'idea'
|
|
id 'org.openjfx.javafxplugin' version '0.0.10'
|
|
id 'org.beryx.runtime' version '1.12.7'
|
|
}
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
maven { url "https://jitpack.io" }
|
|
}
|
|
|
|
version = '0.5.0-alpha7'
|
|
sourceCompatibility = '17'
|
|
|
|
javafx {
|
|
version = "17.0.1"
|
|
modules = ['javafx.base', 'javafx.controls', 'javafx.graphics', 'javafx.swing']
|
|
configuration = "implementation"
|
|
}
|
|
|
|
sourceSets {
|
|
main.java.srcDirs 'src/main'
|
|
test.java.srcDirs 'src/test'
|
|
}
|
|
|
|
test {
|
|
useJUnitPlatform()
|
|
}
|
|
|
|
configurations {
|
|
javafx_libs_linux
|
|
javafx_libs_osx
|
|
javafx_libs_win
|
|
}
|
|
|
|
dependencies {
|
|
|
|
// JUnit Tests
|
|
testImplementation 'junit:junit:4.12'
|
|
testImplementation 'org.assertj:assertj-core:3.8.0'
|
|
testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0")
|
|
|
|
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
|
|
|
|
//Jitpack imports
|
|
implementation 'com.github.dnault:libresample4j:master'
|
|
implementation 'com.github.DSheirer.jmbe:jmbe-api:1.0.0'
|
|
implementation 'com.github.nwaldispuehl:java-lame:v3.98.4'
|
|
|
|
//mavenCentral/jcenter imports
|
|
implementation 'ch.qos.logback:logback-classic:1.2.3'
|
|
implementation 'ch.qos.logback:logback-core:1.2.3'
|
|
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.9.8'
|
|
implementation 'com.fazecast:jSerialComm:2.5.0'
|
|
implementation 'com.github.jiconfont:jiconfont-font_awesome:4.7.0.1'
|
|
implementation 'com.github.jiconfont:jiconfont-javafx:1.0.0'
|
|
implementation 'com.github.jiconfont:jiconfont-swing:1.0.1'
|
|
implementation 'com.github.wendykierp:JTransforms:3.1'
|
|
implementation 'com.google.code.gson:gson:2.8.6'
|
|
implementation 'com.google.guava:guava:27.0.1-jre'
|
|
implementation 'com.jidesoft:jide-oss:3.6.18'
|
|
implementation 'com.miglayout:miglayout-swing:5.2'
|
|
implementation 'com.mpatric:mp3agic:0.9.1'
|
|
implementation 'commons-io:commons-io:2.7'
|
|
implementation 'eu.hansolo:charts:1.0.5'
|
|
implementation 'io.github.dsheirer:radio-reference-api:15.1.8'
|
|
implementation 'javax.usb:usb-api:1.0.2'
|
|
implementation 'net.coderazzi:tablefilter-swing:5.4.0'
|
|
implementation 'org.apache.commons:commons-compress:1.20'
|
|
implementation 'org.apache.commons:commons-lang3:3.8.1'
|
|
implementation 'org.apache.commons:commons-math3:3.6.1'
|
|
implementation 'org.apache.mina:mina-core:2.1.3'
|
|
implementation 'org.apache.mina:mina-http:2.1.3'
|
|
implementation 'org.controlsfx:controlsfx:11.1.0'
|
|
implementation 'org.rauschig:jarchivelib:1.0.0'
|
|
implementation 'org.slf4j:slf4j-api:1.7.25'
|
|
implementation 'org.usb4java:libusb4java:1.3.0'
|
|
implementation 'org.usb4java:usb4java:1.3.0'
|
|
implementation 'org.usb4java:usb4java-javax:1.3.0'
|
|
implementation 'pl.edu.icm:JLargeArrays:1.6'
|
|
|
|
//JavaFX libraries for Linux
|
|
javafx_libs_linux "org.openjfx:javafx-base:$javafx.version:linux"
|
|
javafx_libs_linux "org.openjfx:javafx-controls:$javafx.version:linux"
|
|
javafx_libs_linux "org.openjfx:javafx-graphics:$javafx.version:linux"
|
|
javafx_libs_linux "org.openjfx:javafx-swing:$javafx.version:linux"
|
|
|
|
//JavaFX libraries for OSX
|
|
javafx_libs_osx "org.openjfx:javafx-base:$javafx.version:mac"
|
|
javafx_libs_osx "org.openjfx:javafx-controls:$javafx.version:mac"
|
|
javafx_libs_osx "org.openjfx:javafx-graphics:$javafx.version:mac"
|
|
javafx_libs_osx "org.openjfx:javafx-swing:$javafx.version:mac"
|
|
|
|
//JavaFX libraries for Windows
|
|
javafx_libs_win "org.openjfx:javafx-base:$javafx.version:win"
|
|
javafx_libs_win "org.openjfx:javafx-controls:$javafx.version:win"
|
|
javafx_libs_win "org.openjfx:javafx-graphics:$javafx.version:win"
|
|
javafx_libs_win "org.openjfx:javafx-swing:$javafx.version:win"
|
|
}
|
|
|
|
application {
|
|
mainClassName = "io.github.dsheirer.gui.SDRTrunk"
|
|
|
|
//Note: jide-oss.jar requires access to hidden windows look & feel
|
|
//Note: controlsfx.jar requires access to hidden javaFX classes
|
|
applicationDefaultJvmArgs = ['--add-exports=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED',
|
|
'--add-exports=javafx.base/com.sun.javafx.event=org.controlsfx.controls']
|
|
}
|
|
|
|
/**
|
|
* Runtime JVM arguments. JDK 17 has hidden a number of classes that are no longer exported from the
|
|
* modules. Some legacy support libraries still require access to these classes, so we explicitly
|
|
* add them to be exported from those modules here.
|
|
*/
|
|
import org.gradle.internal.os.OperatingSystem;
|
|
|
|
run {
|
|
if(OperatingSystem.current().isWindows()) {
|
|
//Note: jide-oss.jar requires access to hidden windows look & feel
|
|
//Note: controlsfx.jar requires access to hidden javaFX classes
|
|
jvmArgs = ['--add-exports=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED',
|
|
'--add-exports=javafx.base/com.sun.javafx.event=ALL-UNNAMED']
|
|
}
|
|
else {
|
|
//Note: controlsfx.jar requires access to hidden javaFX classes
|
|
jvmArgs = ['--add-exports=javafx.base/com.sun.javafx.event=ALL-UNNAMED']
|
|
}
|
|
}
|
|
|
|
jar {
|
|
manifest {
|
|
attributes (
|
|
'Implementation-Title' : 'sdrtrunk project',
|
|
'Implementation-Version' : archiveVersion,
|
|
'Created-By' : "Gradle ${gradle.gradleVersion}",
|
|
'Build-Timestamp' : new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").format(new Date()),
|
|
'Build-JDK' : "${System.properties['java.version']} (${System.properties['java.vendor']} ${System.properties['java.vm.version']}",
|
|
'Build-OS' : "${System.properties['os.name']} (${System.properties['os.arch']} ${System.properties['os.version']}"
|
|
)
|
|
}
|
|
}
|
|
|
|
idea {
|
|
module {
|
|
downloadJavadoc = true
|
|
downloadSources = true
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Java Development Kit (JDK) locations. In order to build OS-specific images, these paths must point to the parent
|
|
* directory containing the 'bin' directory within a JDK for each of the specified architectures. These JDKs are used
|
|
* by the runtime and runtimeZip tasks to produce platform-specific builds. If none of these paths exists, then an
|
|
* image will be created for the host OS using the installed JDK.
|
|
*/
|
|
def jdk_base = '/home/denny/java_jdks/'
|
|
|
|
def jdk_linux_arm64 = jdk_base + 'linux-arm64/jdk-17.0.1-full'
|
|
def jdk_linux_x86_64 = jdk_base + 'linux-x64/jdk-17.0.1-full'
|
|
def jdk_osx_x86_64 = jdk_base + 'osx-x64/jdk-17.0.1-full.jdk'
|
|
def jdk_windows_x86_64 = jdk_base + 'windows-x64/jdk-17.0.1-full'
|
|
|
|
def hasTargetJdk = file(jdk_linux_x86_64).exists() ||
|
|
file(jdk_linux_arm64) ||
|
|
file(jdk_osx_x86_64).exists() ||
|
|
file(jdk_windows_x86_64).exists()
|
|
|
|
/**
|
|
* Beryx Runtime plugin - adds operating system specific runtime build targets when the OS-specific JDK is
|
|
* found on the local file system. The runtime plugin enables you to optionally download these files,
|
|
* however I normally have them installed locally and use those versions.
|
|
*/
|
|
runtime {
|
|
if(file(jdk_linux_arm64).exists())
|
|
{
|
|
targetPlatform('linux-arm64-v' + version, jdk_linux_arm64)
|
|
}
|
|
else
|
|
{
|
|
println("Skipping OS Image - Linux ARM 64-bit JDK was not found at " + jdk_linux_arm64)
|
|
}
|
|
|
|
if(file(jdk_linux_x86_64).exists())
|
|
{
|
|
targetPlatform('linux-x86_64-v' + version, jdk_linux_x86_64)
|
|
}
|
|
else
|
|
{
|
|
println("Skipping OS Image - Linux x86 64-bit JDK was not found at " + jdk_linux_x86_64)
|
|
}
|
|
|
|
if(file(jdk_osx_x86_64).exists())
|
|
{
|
|
targetPlatform('osx-x86_64-v' + version, jdk_osx_x86_64)
|
|
}
|
|
else
|
|
{
|
|
println("Skipping OS Image - OSX x86 64-bit JDK was not found at " + jdk_osx_x86_64);
|
|
}
|
|
|
|
if(file(jdk_windows_x86_64).exists())
|
|
{
|
|
targetPlatform('windows-x86_64-v' + version, jdk_windows_x86_64)
|
|
}
|
|
else
|
|
{
|
|
println("Skipping OS Image - Windows x86 64-bit JDK was not found at " + jdk_windows_x86_64)
|
|
}
|
|
|
|
options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
|
|
modules = ['java.desktop', 'java.naming', 'jdk.unsupported', 'jdk.unsupported.desktop', 'java.net.http',
|
|
'java.sql', 'jdk.crypto.ec']
|
|
imageZip = hasTargetJdk ? file("$buildDir/image/sdr-trunk.zip") : file("$buildDir/image/sdr-trunk-" + version + ".zip")
|
|
}
|
|
|
|
def image_lib_linux_arm64 = file("$buildDir/image/sdr-trunk-linux-arm64-v" + version + "/lib")
|
|
def image_lib_linux_x86_64 = file("$buildDir/image/sdr-trunk-linux-x86_64-v" + version + "/lib")
|
|
def image_lib_osx_x86_64 = file("$buildDir/image/sdr-trunk-osx-x86_64-v" + version + "/lib")
|
|
def image_lib_win_x86_64 = file("$buildDir/image/sdr-trunk-windows-x86_64-v" + version + "/lib")
|
|
|
|
/**
|
|
* Copy JavaFX OS-specific libraries for each JDK to each platform target directory
|
|
*/
|
|
tasks.runtime.doLast
|
|
{
|
|
if(file(jdk_linux_arm64).exists())
|
|
{
|
|
//Delete any host system OS-specific JavaFX JDK modules that were inserted as part of default build
|
|
delete(fileTree(image_lib_linux_arm64).include { it.name ==~ /javafx.*-(win|mac|linux)\.jar/ })
|
|
|
|
//Copy OS-specific JavaFX libraries
|
|
copy {
|
|
from configurations.javafx_libs_linux
|
|
into image_lib_linux_arm64
|
|
}
|
|
}
|
|
|
|
if(file(jdk_linux_x86_64).exists())
|
|
{
|
|
//Delete any host system OS-specific JavaFX JDK modules that were inserted as part of default build
|
|
delete(fileTree(image_lib_linux_x86_64).include { it.name ==~ /javafx.*-(win|mac|linux)\.jar/ })
|
|
|
|
//Copy OS-specific JavaFX libraries
|
|
copy {
|
|
from configurations.javafx_libs_linux
|
|
into image_lib_linux_x86_64
|
|
}
|
|
}
|
|
|
|
if(file(jdk_osx_x86_64).exists())
|
|
{
|
|
//Delete any host system OS-specific JavaFX JDK modules that were inserted as part of default build
|
|
delete(fileTree(image_lib_osx_x86_64).include { it.name ==~ /javafx.*-(win|mac|linux)\.jar/ })
|
|
|
|
//Copy OS-specific JavaFX libraries
|
|
copy {
|
|
from configurations.javafx_libs_osx
|
|
into image_lib_osx_x86_64
|
|
}
|
|
}
|
|
|
|
if(file(jdk_windows_x86_64).exists())
|
|
{
|
|
//Delete any host system OS-specific JavaFX JDK modules that were inserted as part of default build
|
|
delete(fileTree(image_lib_win_x86_64).include { it.name ==~ /javafx.*-(win|mac|linux)\.jar/ })
|
|
|
|
//Copy OS-specific JavaFX libraries
|
|
copy {
|
|
from configurations.javafx_libs_win
|
|
into image_lib_win_x86_64
|
|
}
|
|
}
|
|
}
|