Skip to content

Commit

Permalink
Gradle 7.2 upgrade / Java 17 Build Support (hyperledger#2761)
Browse files Browse the repository at this point in the history
* Gradle 7.2 upgrade / Java 17 Build Support

* Upgrade to Gradle 7.2, which supports Java 17
* Regenerate gradlew script and wrapper (as recommended)
* Suppress the removal warning for `AccessController` for now
* Update the JMH version to get rid of Gradle deprecation warning
* Add spotless `targetExcludes` so it won't re-format submodules

Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
  • Loading branch information
shemnon authored Sep 15, 2021
1 parent 007beac commit 9ae84cb
Show file tree
Hide file tree
Showing 9 changed files with 451 additions and 114 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Changelog

## 21.7.4
### Additions and Improvements
- Upgrade Gradle to 7.2, which supports building with Java 17 [#2761](https://github.com/hyperledger/besu/pull/2376)

### Bug Fixes

### Early Access Features

## 21.7.3
### Additions and Improvements
- Migration to Apache Tuweni 2.0 [\#2376](https://github.com/hyperledger/besu/pull/2376)
Expand Down
185 changes: 185 additions & 0 deletions besu/src/main/scripts/unixStartScript.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
#!/usr/bin/env sh

#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

##############################################################################
##
## ${applicationName} start up script for UN*X
##
##############################################################################

# Attempt to set APP_HOME
# Resolve links: \$0 may be a link
PRG="\$0"
# Need this for relative symlinks.
while [ -h "\$PRG" ] ; do
ls=`ls -ld "\$PRG"`
link=`expr "\$ls" : '.*-> \\(.*\\)\$'`
if expr "\$link" : '/.*' > /dev/null; then
PRG="\$link"
else
PRG=`dirname "\$PRG"`"/\$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"\$PRG\"`/${appHomeRelativePath}" >/dev/null
APP_HOME="`pwd -P`"
cd "\$SAVED" >/dev/null

APP_NAME="${applicationName}"
APP_BASE_NAME=`basename "\$0"`

# Add default JVM options here. You can also use JAVA_OPTS and ${optsEnvironmentVar} to pass JVM options to this script.
DEFAULT_JVM_OPTS=${defaultJvmOpts}

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"

warn () {
echo "\$*"
}

die () {
echo
echo "\$*"
echo
exit 1
}

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MSYS* | MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac

CLASSPATH=$classpath
<% if ( mainClassName.startsWith('--module ') ) { %>MODULE_PATH=$modulePath<% } %>

# Determine the Java command to use to start the JVM.
if [ -n "\$JAVA_HOME" ] ; then
if [ -x "\$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="\$JAVA_HOME/jre/sh/java"
else
JAVACMD="\$JAVA_HOME/bin/java"
fi
if [ ! -x "\$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: \$JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if [ "\$cygwin" = "false" -a "\$darwin" = "false" -a "\$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ \$? -eq 0 ] ; then
if [ "\$MAX_FD" = "maximum" -o "\$MAX_FD" = "max" ] ; then
MAX_FD="\$MAX_FD_LIMIT"
fi
ulimit -n \$MAX_FD
if [ \$? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: \$MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: \$MAX_FD_LIMIT"
fi
fi

# For Darwin, add options to specify how the application appears in the dock
if \$darwin; then
GRADLE_OPTS="\$GRADLE_OPTS \\"-Xdock:name=\$APP_NAME\\" \\"-Xdock:icon=\$APP_HOME/media/gradle.icns\\""
fi

# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "\$cygwin" = "true" -o "\$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "\$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "\$CLASSPATH"`
<% if ( mainClassName.startsWith('--module ') ) { %> MODULE_PATH=`cygpath --path --mixed "\$MODULE_PATH"`<% } %>
JAVACMD=`cygpath --unix "\$JAVACMD"`

# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in \$ROOTDIRSRAW ; do
ROOTDIRS="\$ROOTDIRS\$SEP\$dir"
SEP="|"
done
OURCYGPATTERN="(^(\$ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "\$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="\$OURCYGPATTERN|(\$GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "\$@" ; do
CHECK=`echo "\$arg"|egrep -c "\$OURCYGPATTERN" -`
CHECK2=`echo "\$arg"|egrep -c "^-"` ### Determine if an option

if [ \$CHECK -ne 0 ] && [ \$CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args\$i`=`cygpath --path --ignore --mixed "\$arg"`
else
eval `echo args\$i`="\"\$arg\""
fi
i=`expr \$i + 1`
done
case \$i in
0) set -- ;;
1) set -- "\$args0" ;;
2) set -- "\$args0" "\$args1" ;;
3) set -- "\$args0" "\$args1" "\$args2" ;;
4) set -- "\$args0" "\$args1" "\$args2" "\$args3" ;;
5) set -- "\$args0" "\$args1" "\$args2" "\$args3" "\$args4" ;;
6) set -- "\$args0" "\$args1" "\$args2" "\$args3" "\$args4" "\$args5" ;;
7) set -- "\$args0" "\$args1" "\$args2" "\$args3" "\$args4" "\$args5" "\$args6" ;;
8) set -- "\$args0" "\$args1" "\$args2" "\$args3" "\$args4" "\$args5" "\$args6" "\$args7" ;;
9) set -- "\$args0" "\$args1" "\$args2" "\$args3" "\$args4" "\$args5" "\$args6" "\$args7" "\$args8" ;;
esac
fi

# Escape application args
save () {
for i do printf %s\\\\n "\$i" | sed "s/'/'\\\\\\\\''/g;1s/^/'/;\\\$s/\\\$/' \\\\\\\\/" ; done
echo " "
}
APP_ARGS=`save "\$@"`

# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- \$DEFAULT_JVM_OPTS \$JAVA_OPTS \$${optsEnvironmentVar} <% if ( appNameSystemProperty ) { %>"\"-D${appNameSystemProperty}=\$APP_BASE_NAME\"" <% } %>-classpath "\"\$CLASSPATH\"" <% if ( mainClassName.startsWith('--module ') ) { %>--module-path "\"\$MODULE_PATH\"" <% } %>${mainClassName} "\$APP_ARGS"

exec "\$JAVACMD" "\$@"
90 changes: 90 additions & 0 deletions besu/src/main/scripts/windowsStartScript.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem

@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem ${applicationName} startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.\

set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%${appHomeRelativePath}

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

@rem Add default JVM options here. You can also use JAVA_OPTS and ${optsEnvironmentVar} to pass JVM options to this script.
set DEFAULT_JVM_OPTS=${defaultJvmOpts}

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:execute
@rem Setup the command line

set CLASSPATH=$classpath
<% if ( mainClassName.startsWith('--module ') ) { %>set MODULE_PATH=$modulePath<% } %>

@rem Execute ${applicationName}
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %${optsEnvironmentVar}% <% if ( appNameSystemProperty ) { %>"-D${appNameSystemProperty}=%APP_BASE_NAME%"<% } %> -classpath "%CLASSPATH%" <% if ( mainClassName.startsWith('--module ') ) { %>--module-path "%MODULE_PATH%" <% } %>${mainClassName} %*

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable ${exitEnvironmentVar} if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%${exitEnvironmentVar}%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega
17 changes: 11 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ plugins {
id 'com.github.hierynomus.license' version '0.16.1'
id 'com.jfrog.artifactory' version '4.24.14'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'me.champeau.gradle.jmh' version '0.5.3' apply false
id 'me.champeau.jmh' version '0.6.6' apply false
id 'net.ltgt.errorprone' version '2.0.2'
id 'maven-publish'
}
Expand Down Expand Up @@ -116,7 +116,8 @@ allprojects {
spotless {
java {
// This path needs to be relative to each project
target '**/src/*/java/**/*.java'
target '**/*.java'
targetExclude '**/reference-test/resources/**/*.java'
removeUnusedImports()
googleJavaFormat('1.10.0')
importOrder 'org.hyperledger', 'java', ''
Expand Down Expand Up @@ -424,7 +425,7 @@ subprojects {
}

if (file('src/jmh').directory) {
apply plugin: 'me.champeau.gradle.jmh'
apply plugin: 'me.champeau.jmh'

jmh {
// Allows to control JMH execution directly from the command line. I typical execution may look
Expand All @@ -437,10 +438,10 @@ subprojects {
fork = _intCmdArg('f')
iterations = _intCmdArg('i')
benchmarkMode = _strListCmdArg('bm')
include = _strListCmdArg('include', [''])
includes = _strListCmdArg('include', [''])
humanOutputFile = project.file("${project.buildDir}/reports/jmh/results.txt")
resultFormat = 'JSON'
duplicateClassesStrategy = 'warn'
duplicateClassesStrategy = DuplicatesStrategy.WARN
}

dependencies { jmh 'org.apache.logging.log4j:log4j-api' }
Expand Down Expand Up @@ -501,6 +502,8 @@ def tweakStartScript(createScriptTask) {
}

startScripts {
unixStartScriptGenerator.template = resources.text.fromFile("${projectDir}/besu/src/main/scripts/unixStartScript.txt")
windowsStartScriptGenerator.template = resources.text.fromFile("${projectDir}/besu/src/main/scripts/windowsStartScript.txt")
doLast {
tweakStartScript(startScripts)
}
Expand All @@ -514,6 +517,8 @@ task evmToolStartScripts(type: CreateStartScripts) {
defaultJvmOpts = [
"-Dsecp256k1.randomize=false"
]
unixStartScriptGenerator.template = resources.text.fromFile("${projectDir}/besu/src/main/scripts/unixStartScript.txt")
windowsStartScriptGenerator.template = resources.text.fromFile("${projectDir}/besu/src/main/scripts/windowsStartScript.txt")
doLast {
tweakStartScript(evmToolStartScripts)
}
Expand Down Expand Up @@ -642,7 +647,7 @@ task testDocker {
for (def variant in dockerVariants) {
exec {
def image = project.hasProperty('release.releaseVersion') ? "hyperledger/besu:" + project.property('release.releaseVersion') : "hyperledger/besu:${project.version}"
workingDir "docker/${variant}"
workingDir "${projectDir}/docker/${variant}"
executable "sh"
args "-c", "bash ../test.sh ${image}-${variant}"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public final class BesuProvider extends Provider {

public static final String PROVIDER_NAME = "Besu";

@SuppressWarnings("unchecked")
@SuppressWarnings({"unchecked", "removal"})
public BesuProvider() {
super(PROVIDER_NAME, "1.0", info);
AccessController.doPrivileged(
Expand Down
4 changes: 2 additions & 2 deletions gradle/versions.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,8 @@ dependencyManagement {

dependency 'org.mockito:mockito-core:3.11.2'

dependency 'org.openjdk.jmh:jmh-core:1.23'
dependency 'org.openjdk.jmh:jmh-generator-annprocess:1.23'
dependency 'org.openjdk.jmh:jmh-core:1.29'
dependency 'org.openjdk.jmh:jmh-generator-annprocess:1.29'

dependency 'org.rocksdb:rocksdbjni:6.15.2'

Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading

0 comments on commit 9ae84cb

Please sign in to comment.