From 32e0efa84b314c77c6705142211de1bd1d70564a Mon Sep 17 00:00:00 2001 From: James Gallagher Date: Fri, 5 Jul 2024 10:44:04 -0600 Subject: [PATCH 1/5] Changes to support modern gradle - WIP --- build.gradle | 63 +++++++----- gradle.properties | 1 + src/opendap/bes/Version.java | 187 ----------------------------------- 3 files changed, 39 insertions(+), 212 deletions(-) delete mode 100644 src/opendap/bes/Version.java diff --git a/build.gradle b/build.gradle index df4fbbf44..bbd4bea72 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,6 @@ buildscript { plugins { id 'java' id 'war' - id 'eclipse' id 'idea' // Updated the version from 3.3. Needed to get the sonar target working. jhrg 1/22/24 id 'org.sonarqube' version '4.4.1.3373' @@ -33,6 +32,8 @@ plugins { // jhrg 1/22/24 sonarqube { properties { + property "sonar.gradle.skipCompile", "true" + property "sonar.sourceEncoding", "UTF-8" property "sonar.projectKey", "opendap-olfs" property "sonar.projectName", "olfs" @@ -59,8 +60,13 @@ if (hasProperty('buildScan')) { group = 'org.opendap' description = 'The OLFs build' -sourceCompatibility = 1.8 -targetCompatibility = 1.8 +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +// sourceCompatibility = 1.8 +// targetCompatibility = 1.8 repositories { // For just about everything except... @@ -289,32 +295,32 @@ compileJava { // see https://docs.gradle.org/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html project.ext { - resources_dir = "${projectDir}/resources" + resources_dir = "${projectDir}/resources" as GStringImpl // WebInf_resources_dir = "${project.resources_dir}/hyrax/WEB-INF" // distribution_resources_dir = "${project.resources_dir}/distribution" // Build Directories - build_dir = "${buildDir}" - build_classes = "${project.build_dir}/classes" - build_docs = "${project.build_dir}/docs" - build_dist = "${project.build_dir}/dist" - build_lib = "${project.build_dir}/lib" - build_run = "${project.build_dir}/run" - build_src = "${project.build_dir}/src" - build_resources = "${project.build_dir}/resources" - - hyrax_resources_dir = "${project.resources_dir}/hyrax" - ngap_resources_dir = "${project.resources_dir}/ngap" - robots_resources_dir = "${project.resources_dir}/robots" - build_robots_resources = "${project.build_dir}/robots" - wcs_resources_dir = "${project.resources_dir}/WCS/2.0" + build_dir = "${buildDir}" as GStringImpl + build_classes = "${project.build_dir}/classes" as GStringImpl + build_docs = "${project.build_dir}/docs" as GStringImpl + build_dist = "${project.build_dir}/dist" as GStringImpl + build_lib = "${project.build_dir}/lib" as GStringImpl + build_run = "${project.build_dir}/run" as GStringImpl + build_src = "${project.build_dir}/src" as GStringImpl + build_resources = "${project.build_dir}/resources" as GStringImpl + + hyrax_resources_dir = "${project.resources_dir}/hyrax" as GStringImpl + ngap_resources_dir = "${project.resources_dir}/ngap" as GStringImpl + robots_resources_dir = "${project.resources_dir}/robots" as GStringImpl + build_robots_resources = "${project.build_dir}/robots" as GStringImpl + wcs_resources_dir = "${project.resources_dir}/WCS/2.0" as GStringImpl } clean.doFirst { delete "src_gradle" } -task init_dir { +tasks.register('init_dir') { description "Create required folders in the build directory." doLast { mkdir "${project.build_dir}" @@ -338,7 +344,8 @@ war { from layout.buildDirectory.dir("resources") } -task buildOpendapWar(type: War, dependsOn: classes){ +tasks.register('buildOpendapWar', War) { + dependsOn classes archiveBaseName = 'opendap_server' destinationDirectory = file("$buildDir/dist") @@ -355,7 +362,8 @@ task buildOpendapWar(type: War, dependsOn: classes){ from layout.buildDirectory.dir("resources") } -task buildNgapWar(type: War, dependsOn: classes){ +tasks.register('buildNgapWar', War) { + dependsOn classes dependsOn configurations.ngapDep archiveBaseName = 'opendap_ngap' destinationDirectory = file("$buildDir/dist") @@ -373,7 +381,8 @@ task buildNgapWar(type: War, dependsOn: classes){ from layout.buildDirectory.dir("resources") } -task buildRobotsWar(type: War, dependsOn: classes){ +tasks.register('buildRobotsWar', War) { + dependsOn classes archiveBaseName = 'opendap_robots' destinationDirectory = file("$buildDir/dist") @@ -381,17 +390,20 @@ task buildRobotsWar(type: War, dependsOn: classes){ description = 'Build the Opendap Robots war.' } -task buildDists(dependsOn: [buildOpendapWar, buildNgapWar]){ //hold for later ", buildRobotsWar" +/* +tasks.register('buildDists') { + dependsOn[buildOpendapWar, buildNgapWar] //hold for later ", buildRobotsWar" group = 'warBuilds' description = 'Build the Opendap, Ngap, and Robots war.' } +*/ clean { // FIXME: Awful. instead, look for all (.+)\\.java.in files and delete $1.java jhrg 9/16/21 delete 'src/opendap/bes/Version.java' } -tasks.withType(JavaCompile) { +tasks.withType(JavaCompile).configureEach { //options.compilerArgs << '-Xlint:unchecked' //options.compilerArgs << '-Xlint:unchecked' << '-Werror' //enable to mark deprecated warnings as errors options.deprecation = true @@ -426,6 +438,7 @@ tasks.withType(JavaCompile) { // jhrg 9/15/21 import org.apache.tools.ant.filters.ReplaceTokens +import org.codehaus.groovy.runtime.GStringImpl def tokens = [SERVICE_CONTEXT: project.DEPLOYMENT_CONTEXT, HyraxVersion: project.HYRAX_VERSION, @@ -494,7 +507,7 @@ tasks.register('copyWCSResources', Copy) { // '.java'. // // I made this to see if I could and because I wanted to make the files that get -// tokens substituted explict in the sources. There might be better ways to do this. +// tokens substituted explicit in the sources. There might be better ways to do this. // And handling the substitution this way makes the clean target more complex. // jhrg 9/16 21 tasks.register('substituteVersionInfo', Copy) { diff --git a/gradle.properties b/gradle.properties index 737b022cf..7a3a54337 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,3 +4,4 @@ systemProp.https.protocols = TLSv1.2 systemProp.sonar.host.url=https://sonarcloud.io +systemProp.sonar.gradle.skipCompile=true diff --git a/src/opendap/bes/Version.java b/src/opendap/bes/Version.java deleted file mode 100644 index 7f606f4d7..000000000 --- a/src/opendap/bes/Version.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * ///////////////////////////////////////////////////////////////////////////// - * // This file is part of the "Hyrax Data Server" project. - * // - * // - * // Copyright (c) 2013 OPeNDAP, Inc. - * // Author: Nathan David Potter - * // - * // This library is free software; you can redistribute it and/or - * // modify it under the terms of the GNU Lesser General Public - * // License as published by the Free Software Foundation; either - * // version 2.1 of the License, or (at your option) any later version. - * // - * // This library 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 - * // Lesser General Public License for more details. - * // - * // You should have received a copy of the GNU Lesser General Public - * // License along with this library; if not, write to the Free Software - * // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 - * // - * // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112. - * ///////////////////////////////////////////////////////////////////////////// - */ - -package opendap.bes; - -import opendap.coreServlet.ReqInfo; -import opendap.ppt.PPTException; -import org.jdom.Element; -import org.jdom.JDOMException; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.TreeSet; - -/** - * Contains the Version and UUID information for Hyrax Server. - */ -public class Version { - private static final String olfsVersion = "@OlfsVersion@"; - private static final String hyraxVersion = "@HyraxVersion@"; - - - /** - * Returns a String containing the OLFS version. - * @return The version of OLFS. - */ - public static String getOLFSVersionString() { - return (olfsVersion); - } - - /** - * Returns a String containing the Hyrax version. - * @return The version of Hyrax. - */ public static String getHyraxVersionString() { - return (hyraxVersion); - } - - - /** - * Returns a JDOM ELement containing the OLFS version. - * @return The version of OLFS. - */ - public static Element getOLFSVersionElement() { - Element olfs = new Element("OLFS"); - olfs.setAttribute("version",olfsVersion); - return (olfs); - } - - /** - * Returns a JDOM ELement containing the Hyrax version. - * @return The version of Hyrax. - */ - public static Element getHyraxVersionElement() { - Element hyrax = new Element("Hyrax"); - hyrax.setAttribute("version",hyraxVersion); - return (hyrax); - } - - /** - * Produce the ServerUUID value used by the top level of Hyrax. - * @return The UUID. - */ - public static String getServerUUID(){ - return "e93c3d09-a5d9-49a0-a912-a0ca16430b91"; - } - - - - /** - * - * @param request The client request for which to return the verison. - * @return A string containing the value of the XDODS-Server MIME header as - * ascertained by querying the BES. - * @throws Exception If these is a problem getting the version document. - */ - public static String getXDODSServerVersion(HttpServletRequest request) { - String relativeUrl = ReqInfo.getLocalUrl(request); - BesGroup besGroup = BESManager.getBesGroup(relativeUrl); - TreeSet commonDapVersions = besGroup.getCommonDapVersions(); - - return ("dods/" + commonDapVersions.last()); - } - - /** - * @param request The client request for which to return the verison. - * @return A String containing the value of the XOPeNDAP-Server MIME header ascertained by querying - * the BES and conforming to the DAP4 specification. - * @throws Exception If these is a problem getting the version document. - */ - public static String getXOPeNDAPServerVersion(HttpServletRequest request) - throws JDOMException, BadConfigurationException, PPTException, BESError, IOException { - - String relativeUrl = ReqInfo.getLocalUrl(request); - BesGroup besGroup = BESManager.getBesGroup(relativeUrl); - TreeSet componentVersions = besGroup.getGroupComponentVersions(); - - if(componentVersions.isEmpty()) - return ("Server-Version-Unknown"); - - StringBuilder xOpendapServerVersion = new StringBuilder(); - - String comma = ""; - for(String componentVersion : componentVersions){ - xOpendapServerVersion.append(comma).append(componentVersion); - comma= ", "; - } - return (xOpendapServerVersion.toString()); - } - - - /** - * Looks at an incoming client request and determines which version of the - * DAP the client can understand. - * - * @param request The client request. - * @return A String containing the XDAP MIME header value that describes - * the DAP specifcation that the server response conforms to. - * @throws Exception If these is a problem getting the version document. - */ - public static String getXDAPVersion(HttpServletRequest request) { - String responseDAP = null; - String clientDapVer = null; - BesGroup besGroup; - - if (request != null) { - clientDapVer = request.getHeader("X-DAP"); - String relativeUrl = ReqInfo.getLocalUrl(request); - besGroup = BESManager.getBesGroup(relativeUrl); - } - else { - besGroup = BESManager.getBesGroup("/"); - - } - TreeSet commonDapVersions = besGroup.getCommonDapVersions(); - - for (String version : commonDapVersions) { - if (clientDapVer != null && clientDapVer.equals(version)) { - responseDAP = version; - } - } - String highestVersionString = commonDapVersions.last(); - if (responseDAP == null) - responseDAP = highestVersionString; - - return (responseDAP); - } - - /** - * Adds the response HTTP headers with the OPeNDAP version content. - * - * @param request Client request to serviced - * @param response The response in which to set the headers. - * @throws Exception If these is a problem getting the version document. - */ - public static void setOpendapMimeHeaders(HttpServletRequest request, HttpServletResponse response) - throws JDOMException, BadConfigurationException, PPTException, IOException, BESError { - response.setHeader("XDODS-Server", getXDODSServerVersion(request)); - response.setHeader("XOPeNDAP-Server", getXOPeNDAPServerVersion(request)); - response.setHeader("X-DAP", getXDAPVersion(request)); - - } - -} From a52eddead629892d0839f51e7137ade8768a5564 Mon Sep 17 00:00:00 2001 From: ndp-opendap Date: Fri, 12 Jul 2024 07:57:42 -0700 Subject: [PATCH 2/5] Restored Version.java, result compiles with gradle 8.7 --- src/opendap/bes/Version.java | 186 +++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 src/opendap/bes/Version.java diff --git a/src/opendap/bes/Version.java b/src/opendap/bes/Version.java new file mode 100644 index 000000000..df8b812d5 --- /dev/null +++ b/src/opendap/bes/Version.java @@ -0,0 +1,186 @@ +/* + * ///////////////////////////////////////////////////////////////////////////// + * // This file is part of the "Hyrax Data Server" project. + * // + * // + * // Copyright (c) 2013 OPeNDAP, Inc. + * // Author: Nathan David Potter + * // + * // This library is free software; you can redistribute it and/or + * // modify it under the terms of the GNU Lesser General Public + * // License as published by the Free Software Foundation; either + * // version 2.1 of the License, or (at your option) any later version. + * // + * // This library 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 + * // Lesser General Public License for more details. + * // + * // You should have received a copy of the GNU Lesser General Public + * // License along with this library; if not, write to the Free Software + * // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * // + * // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112. + * ///////////////////////////////////////////////////////////////////////////// + */ + +package opendap.bes; + +import opendap.coreServlet.ReqInfo; +import opendap.ppt.PPTException; +import org.jdom.Element; +import org.jdom.JDOMException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.TreeSet; + +/** + * Contains the Version and UUID information for Hyrax Server. + */ +public class Version { + private static final String olfsVersion = "@OlfsVersion@"; + private static final String hyraxVersion = "@HyraxVersion@"; + + /* + * Returns a String containing the OLFS version. + * @return The version of OLFS. + public static String getOLFSVersionString() { + return (olfsVersion); + */ + + /** + * Returns a String containing the Hyrax version. + * @return The version of Hyrax. + */ public static String getHyraxVersionString() { + return (hyraxVersion); + } + + + /** + * Returns a JDOM ELement containing the OLFS version. + * @return The version of OLFS. + */ + public static Element getOLFSVersionElement() { + Element olfs = new Element("OLFS"); + olfs.setAttribute("version",olfsVersion); + return (olfs); + } + + /** + * Returns a JDOM ELement containing the Hyrax version. + * @return The version of Hyrax. + */ + public static Element getHyraxVersionElement() { + Element hyrax = new Element("Hyrax"); + hyrax.setAttribute("version",hyraxVersion); + return (hyrax); + } + + /* + * Produce the ServerUUID value used by the top level of Hyrax. + * @return The UUID. + public static String getServerUUID(){ + return "e93c3d09-a5d9-49a0-a912-a0ca16430b91"; + } + */ + + + + /** + * + * @param request The client request for which to return the verison. + * @return A string containing the value of the XDODS-Server MIME header as + * ascertained by querying the BES. + */ + public static String getXDODSServerVersion(HttpServletRequest request) { + String relativeUrl = ReqInfo.getLocalUrl(request); + BesGroup besGroup = BESManager.getBesGroup(relativeUrl); + TreeSet commonDapVersions = besGroup.getCommonDapVersions(); + + return ("dods/" + commonDapVersions.last()); + } + + /** + * @param request The client request for which to return the verison. + * @return A String containing the value of the XOPeNDAP-Server MIME header ascertained by querying + * the BES and conforming to the DAP4 specification. + * @throws JDOMException If the BES response cannot be parsed. + * @throws BadConfigurationException If the configuration doc has incorrect/missing/unexpected content. + * @throws PPTException If there is a problem communicating with the BES. + * @throws BESError If there is a problem communicating with the BES. + * @throws IOException If there is a problem communicating with the BES. + */ + public static String getXOPeNDAPServerVersion(HttpServletRequest request) + throws JDOMException, BadConfigurationException, PPTException, BESError, IOException { + + String relativeUrl = ReqInfo.getLocalUrl(request); + BesGroup besGroup = BESManager.getBesGroup(relativeUrl); + TreeSet componentVersions = besGroup.getGroupComponentVersions(); + + if(componentVersions.isEmpty()) + return ("Server-Version-Unknown"); + + StringBuilder xOpendapServerVersion = new StringBuilder(); + + String comma = ""; + for(String componentVersion : componentVersions){ + xOpendapServerVersion.append(comma).append(componentVersion); + comma= ", "; + } + return (xOpendapServerVersion.toString()); + } + + + /** + * Looks at an incoming client request and determines which version of the + * DAP the client can understand. + * + * @param request The client request. + * @return A String containing the XDAP MIME header value that describes + * the DAP specifcation that the server response conforms to. + */ + public static String getXDAPVersion(HttpServletRequest request) { + String responseDAP = null; + String clientDapVer = null; + BesGroup besGroup; + + if (request != null) { + clientDapVer = request.getHeader("X-DAP"); + String relativeUrl = ReqInfo.getLocalUrl(request); + besGroup = BESManager.getBesGroup(relativeUrl); + } + else { + besGroup = BESManager.getBesGroup("/"); + + } + TreeSet commonDapVersions = besGroup.getCommonDapVersions(); + + for (String version : commonDapVersions) { + if (clientDapVer != null && clientDapVer.equals(version)) { + responseDAP = version; + } + } + String highestVersionString = commonDapVersions.last(); + if (responseDAP == null) + responseDAP = highestVersionString; + + return (responseDAP); + } + + /** + * Adds the response HTTP headers with the OPeNDAP version content. + * + * @param request Client request to serviced + * @param response The response in which to set the headers. + */ + public static void setOpendapMimeHeaders(HttpServletRequest request, HttpServletResponse response) + throws JDOMException, BadConfigurationException, PPTException, IOException, BESError { + response.setHeader("XDODS-Server", getXDODSServerVersion(request)); + response.setHeader("XOPeNDAP-Server", getXOPeNDAPServerVersion(request)); + response.setHeader("X-DAP", getXDAPVersion(request)); + + } + +} From a43894adf68fa5e417eb7d4ce60ca10e5f632acc Mon Sep 17 00:00:00 2001 From: ndp-opendap Date: Thu, 18 Jul 2024 06:23:08 -0700 Subject: [PATCH 3/5] Restored Version.java. Small patch to build.gradle to prevent it's removal --- build.gradle | 17 +++++++++-------- src/opendap/bes/Version.java | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 5eec9dae8..52ef18c49 100644 --- a/build.gradle +++ b/build.gradle @@ -41,8 +41,8 @@ sonarqube { property "sonar.organization", "opendap" property "sonar.inclusions", "src" property "sonar.exclusions", "src/opendap/Coverity_Model.java," + - "retired/**/*.java," + - "src/opendap/**/*Test.java" + "retired/**/*.java," + + "src/opendap/**/*Test.java" property "sonar.java.binaries", "build" property "sonar.java.libraries", "lib/*.jar" } @@ -300,7 +300,7 @@ dependencies { // Substitute the version information before compilation compileJava { doFirst { - println 'HYRAX_VERSION: ' + project.HYRAX_VERSION + println 'HYRAX_VERSION: ' + project.HYRAX_VERSION } dependsOn 'substituteVersionInfo' @@ -345,7 +345,8 @@ tasks.register('init_dir') { // See: https://docs.gradle.org/current/userguide/war_plugin.html // We want to make multiple war files (opendap, ROOT, ngap) I think. This answer shows how: // given that https://stackoverflow.com/questions/13077694/create-multiple-war-files-with-different-dependencies-in-gradle -war { +war +{ archiveBaseName = 'opendap' // Copy/filter the various resource files @@ -413,7 +414,7 @@ tasks.register('buildDists') { clean { // FIXME: Awful. instead, look for all (.+)\\.java.in files and delete $1.java jhrg 9/16/21 - delete 'src/opendap/bes/Version.java' + // delete 'src/opendap/bes/Version.java' // I had to replace Version.java, we need it. ndp 07/18/24 } tasks.withType(JavaCompile).configureEach { @@ -453,9 +454,9 @@ tasks.withType(JavaCompile).configureEach { import org.apache.tools.ant.filters.ReplaceTokens import org.codehaus.groovy.runtime.GStringImpl -def tokens = [SERVICE_CONTEXT: project.DEPLOYMENT_CONTEXT, - HyraxVersion: project.HYRAX_VERSION, - OlfsVersion: project.OLFS_VERSION, +def tokens = [SERVICE_CONTEXT : project.DEPLOYMENT_CONTEXT, + HyraxVersion : project.HYRAX_VERSION, + OlfsVersion : project.OLFS_VERSION, WcsSoftwareVersion: project.WCS_VERSION] // Not used. jhrg 9/17/21 WCS_SOFTWARE_VERSION: project.WCS_VERSION diff --git a/src/opendap/bes/Version.java b/src/opendap/bes/Version.java index df8b812d5..09668e469 100644 --- a/src/opendap/bes/Version.java +++ b/src/opendap/bes/Version.java @@ -43,7 +43,7 @@ public class Version { private static final String olfsVersion = "@OlfsVersion@"; private static final String hyraxVersion = "@HyraxVersion@"; - /* + /* Unused * Returns a String containing the OLFS version. * @return The version of OLFS. public static String getOLFSVersionString() { @@ -78,7 +78,7 @@ public static Element getHyraxVersionElement() { return (hyrax); } - /* + /* Unused. * Produce the ServerUUID value used by the top level of Hyrax. * @return The UUID. public static String getServerUUID(){ From 1d6ce2945500ae3a98c457132f1da5b535c8bc38 Mon Sep 17 00:00:00 2001 From: ndp-opendap Date: Mon, 3 Feb 2025 06:15:33 -0800 Subject: [PATCH 4/5] Removed unused code --- src/opendap/bes/Version.java | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/src/opendap/bes/Version.java b/src/opendap/bes/Version.java index 09668e469..08dc07129 100644 --- a/src/opendap/bes/Version.java +++ b/src/opendap/bes/Version.java @@ -43,17 +43,12 @@ public class Version { private static final String olfsVersion = "@OlfsVersion@"; private static final String hyraxVersion = "@HyraxVersion@"; - /* Unused - * Returns a String containing the OLFS version. - * @return The version of OLFS. - public static String getOLFSVersionString() { - return (olfsVersion); - */ /** * Returns a String containing the Hyrax version. * @return The version of Hyrax. - */ public static String getHyraxVersionString() { + */ + public static String getHyraxVersionString() { return (hyraxVersion); } @@ -78,15 +73,6 @@ public static Element getHyraxVersionElement() { return (hyrax); } - /* Unused. - * Produce the ServerUUID value used by the top level of Hyrax. - * @return The UUID. - public static String getServerUUID(){ - return "e93c3d09-a5d9-49a0-a912-a0ca16430b91"; - } - */ - - /** * From 94b830ab156bd38e94d4460a000822802cdb0ee4 Mon Sep 17 00:00:00 2001 From: Hannah Robertson Date: Thu, 21 Aug 2025 15:52:45 -0400 Subject: [PATCH 5/5] Update build.gradle --- build.gradle | 3 --- 1 file changed, 3 deletions(-) diff --git a/build.gradle b/build.gradle index bcbf8c85e..8bec36cf9 100644 --- a/build.gradle +++ b/build.gradle @@ -64,9 +64,6 @@ java { targetCompatibility = JavaVersion.VERSION_1_9 } -// sourceCompatibility = 1.8 -// targetCompatibility = 1.8 - repositories { // For just about everything except... mavenCentral()