()
sourceSets.forEach {
sourceSet ->
- sourceSet.allSource.findAll { !it.path.contains("build") && !(it.path.contains("test") && it.path.contains("resources"))}.each {
+ sourceSet.allSource.findAll {
+ !it.path.contains("build") &&
+ !(it.path.contains("test") && it.path.contains("resources"))
+ }.each {
file ->
- if (!file.name.contains("json")){
- BufferedReader r = new BufferedReader(new FileReader(file))
- def line, hasSPDX = false, hasTraditional = false
- while ((line = r.readLine()) != null) {
- if (line.contains("SPDX-License-Identifier")) {
- hasSPDX = true
- break
- }
- if (line.contains("http://www.apache.org/licenses/LICENSE-2.0")) {
- hasTraditional = true
- break
+ if (!file.name.contains("json")) {
+ BufferedReader r = new BufferedReader(new FileReader(file))
+ def line, hasSPDX = false, hasTraditional = false
+ while ((line = r.readLine()) != null) {
+ if (line.contains("SPDX-License-Identifier")) {
+ hasSPDX = true
+ break
+ }
+ if (line.contains("http://www.apache.org/licenses/LICENSE-2.0")) {
+ hasTraditional = true
+ break
+ }
}
- }
- if (!hasSPDX) {
- if (hasTraditional) {
- noSPDX.add(file)
- } else {
- missing.add(file)
+ if (!hasSPDX) {
+ if (hasTraditional) {
+ noSPDX.add(file)
+ } else {
+ missing.add(file)
+ }
}
}
- }
}
}
if (noSPDX.isEmpty()) {
- println "All remaining files have Apache 2.0 headers"
+ println "All remaining files have Apache 2.0 headers."
} else {
println "We are standardizing with the SPDX style license headers."
println "The following files contain the traditional license headers which are still valid:"
@@ -223,17 +216,13 @@ javadoc {
classpath = sourceSets.main.runtimeClasspath
- javadoc.options.addStringOption('Xdoclint:none', '-quiet')
+ options.addStringOption('Xdoclint:none', '-quiet')
+ options.addStringOption('Xwerror', '-quiet')
options.overview = "src/main/java/org/hyperledger/fabric/overview.html"
-}
-if (JavaVersion.current().isJava8Compatible()) {
- project.tasks.withType(Javadoc) {
- options.addStringOption('Xdoclint:all', '-quiet')
- options.addStringOption('Xwerror', '-quiet')
- }
}
+def final stagingDeployUrl = layout.buildDirectory.dir('staging-deploy')
publishing {
publications {
@@ -246,10 +235,12 @@ publishing {
name = 'JavaChaincodeShim'
packaging = 'jar'
description = 'Hyperledger Fabric Java Chaincode Shim'
- url = 'http://www.hyperledger.org/'
+ url = 'https://hyperledger.github.io/fabric-chaincode-java/'
scm {
- url = 'https://github.com/hyperledger/fabric-chaincode-java.git'
+ connection = 'scm:git:https://github.com/hyperledger/fabric-chaincode-java.git'
+ developerConnection = 'scm:git:ssh://github.com:hyperledger/fabric-chaincode-java.git'
+ url = 'https://github.com/hyperledger/fabric-chaincode-java'
}
licenses {
license {
@@ -259,26 +250,16 @@ publishing {
}
developers {
- developer {
- id = 'gennadylaventman'
- name = 'Gennady Laventman'
- email = 'gennady@il.ibm.com'
- }
- developer {
- id = 'luiss'
- name = 'Luis Sanchez'
- email = 'luiss@me.com'
- }
- developer {
- id = 'C0rWin'
- name = 'Artem Barger'
- email = 'bartem@il.ibm.com'
- }
developer {
id = 'denyeart'
name = 'David Enyeart'
email = 'enyeart@us.ibm.com'
}
+ developer {
+ id = 'bestbeforetoday'
+ name = 'Mark S. Lewis'
+ email = 'Mark.S.Lewis@outlook.com'
+ }
}
}
}
@@ -287,17 +268,12 @@ publishing {
repositories {
maven {
- name = "release"
- url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
- credentials {
- username = project.findProperty('ossrhUsername')
- password = project.findProperty('ossrhPassword')
- }
-
+ name = "Staging"
+ url = stagingDeployUrl
}
maven {
- name = "GitHubPackages"
+ name = "GitHub"
url = "https://maven.pkg.github.com/hyperledger/fabric-chaincode-java"
credentials {
username = System.getenv("GITHUB_ACTOR")
@@ -308,16 +284,33 @@ publishing {
}
signing {
- println "Signing"
- if (project.findProperty('signing.key')) {
- def signingKey = project.findProperty('signing.key')
- def signingPassword = project.findProperty('signing.password')
- useInMemoryPgpKeys(signingKey, signingPassword)
-
- sign publishing.publications.shim
- println "... signed"
- } else {
- println "... no keys to use "
+ required = { gradle.taskGraph.hasTask(":${project.name}:publishShimPublicationToStagingRepository") }
+
+ def signingKey = findProperty('signingKey')
+ def signingPassword = findProperty('signingPassword')
+ useInMemoryPgpKeys(signingKey, signingPassword)
+
+ sign publishing.publications.shim
+}
+
+jreleaser {
+ gitRootSearch = true
+ deploy {
+ maven {
+ mavenCentral {
+ sonatype {
+ active = 'ALWAYS'
+ url = 'https://central.sonatype.com/api/v1/publisher'
+ sign = false
+ stagingRepository(file(stagingDeployUrl).toString())
+ }
+ }
+ }
+ }
+ release {
+ github {
+ enabled = false
+ }
}
}
@@ -325,8 +318,8 @@ signing {
// otherwise this fails with a duplicates error.
// (see https://github.com/gradle/gradle/issues/17236)
-task sourcesJar(type: Jar) {
- duplicatesStrategy = 'include'
+tasks.register('sourcesJar', Jar) {
+ duplicatesStrategy = DuplicatesStrategy.INCLUDE
archiveClassifier = 'sources'
from sourceSets.main.allSource
}
@@ -343,40 +336,41 @@ build.dependsOn licenseCheck
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent
-tasks.withType(Test) {
+tasks.withType(Test).configureEach {
environment "CORE_PEER_LOCALMSPID", "mymsp"
testLogging {
// set options for log level LIFECYCLE
events TestLogEvent.FAILED,
- TestLogEvent.PASSED,
- TestLogEvent.SKIPPED,
- TestLogEvent.STANDARD_OUT
- exceptionFormat TestExceptionFormat.FULL
- showExceptions true
- showCauses true
- showStackTraces true
+ TestLogEvent.PASSED,
+ TestLogEvent.SKIPPED,
+ TestLogEvent.STANDARD_OUT
+ exceptionFormat = TestExceptionFormat.FULL
+ showExceptions = true
+ showCauses = true
+ showStackTraces = true
// set options for log level DEBUG and INFO
debug {
events TestLogEvent.STARTED,
- TestLogEvent.FAILED,
- TestLogEvent.PASSED,
- TestLogEvent.SKIPPED,
- TestLogEvent.STANDARD_ERROR,
- TestLogEvent.STANDARD_OUT
- exceptionFormat TestExceptionFormat.FULL
+ TestLogEvent.FAILED,
+ TestLogEvent.PASSED,
+ TestLogEvent.SKIPPED,
+ TestLogEvent.STANDARD_ERROR,
+ TestLogEvent.STANDARD_OUT
+ exceptionFormat = TestExceptionFormat.FULL
}
info.events = debug.events
info.exceptionFormat = debug.exceptionFormat
- afterSuite { desc, result ->
+ afterSuite {desc, result ->
if (!desc.parent) { // will match the outermost suite
def output = "Results: ${result.resultType} (${result.testCount} tests, ${result.successfulTestCount} successes, ${result.failedTestCount} failures, ${result.skippedTestCount} skipped)"
def startItem = '| ', endItem = ' |'
def repeatLength = startItem.length() + output.length() + endItem.length()
- println('\n' + ('-' * repeatLength) + '\n' + startItem + output + endItem + '\n' + ('-' * repeatLength))
+ println('\n' + ('-' * repeatLength) + '\n' + startItem + output + endItem + '\n' +
+ ('-' * repeatLength))
}
}
}
diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/ExecutionService.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/ExecutionService.java
index 8c8596808..629f21bb5 100644
--- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/ExecutionService.java
+++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/ExecutionService.java
@@ -15,6 +15,7 @@
*
* Service that executes {@link InvocationRequest} (wrapped Init/Invoke + extra data) using routing information
*/
+@FunctionalInterface
public interface ExecutionService {
/**
diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/ContractInvocationRequest.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/ContractInvocationRequest.java
index 7a3e0ff36..82a0f9967 100644
--- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/ContractInvocationRequest.java
+++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/ContractInvocationRequest.java
@@ -15,7 +15,7 @@
import org.hyperledger.fabric.shim.ChaincodeStub;
public final class ContractInvocationRequest implements InvocationRequest {
- @SuppressWarnings("PMD.ProperLogger") // PMD 7.7.0 gives a false positive here
+ @SuppressWarnings("PMD.ProperLogger") // PMD 7.12.0 gives a false positive here
private static final Log LOGGER = LogFactory.getLog(ContractInvocationRequest.class);
private static final Pattern NS_REGEX = Pattern.compile(":");
diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/TypeSchema.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/TypeSchema.java
index 8b11eccd9..dab261e54 100644
--- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/TypeSchema.java
+++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/TypeSchema.java
@@ -25,7 +25,7 @@
*
*
Does not include the "schema" top level map
*/
-@SuppressWarnings({"PMD.LooseCoupling", "PMD.GodClass"})
+@SuppressWarnings("PMD.GodClass")
public final class TypeSchema extends HashMap {
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = Logger.getLogger(TypeSchema.class.getName());
diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/SerializerRegistryImpl.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/SerializerRegistryImpl.java
index 728966f09..99a41e03d 100644
--- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/SerializerRegistryImpl.java
+++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/SerializerRegistryImpl.java
@@ -24,7 +24,7 @@
public class SerializerRegistryImpl {
private static final Logger LOGGER = Logger.getLogger(SerializerRegistryImpl.class);
- private final Class annotationClass = Serializer.class;
+ private static final Class ANNOTATION_CLASS = Serializer.class;
// Could index these by name and or type.
private final Map contents = new HashMap<>();
@@ -68,7 +68,7 @@ public void findAndSetContents() throws InstantiationException, IllegalAccessExc
try (ScanResult scanResult = classGraph.scan()) {
for (final ClassInfo classInfo :
- scanResult.getClassesWithAnnotation(this.annotationClass.getCanonicalName())) {
+ scanResult.getClassesWithAnnotation(this.ANNOTATION_CLASS.getCanonicalName())) {
LOGGER.debug(() -> "Found class with contract annotation: " + classInfo.getName());
final Class cls = (Class) classInfo.loadClass();
LOGGER.debug("Loaded class");
diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/Collection.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/Collection.java
index 1f109da8d..42a261074 100644
--- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/Collection.java
+++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/Collection.java
@@ -6,6 +6,7 @@
package org.hyperledger.fabric.ledger;
/** Place holder. */
+@SuppressWarnings("PMD.ImplicitFunctionalInterface")
public interface Collection {
/** Constant that can be used to refer to the 'Worldstate' collection explicitly. */
diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java
index 4352fe14a..8197be59e 100644
--- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java
+++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java
@@ -314,7 +314,7 @@ public void setTlsEnabled(final boolean tlsEnabled) {
*
* @throws IllegalArgumentException if any properties are not valid.
*/
- @SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.NPathComplexity"})
+ @SuppressWarnings("PMD.CyclomaticComplexity")
public void validate() {
if (this.getServerAddress() == null) {
throw new IllegalArgumentException("chaincodeServerProperties.getServerAddress() must be set");
diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementImpl.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementImpl.java
index 1226a3cb7..56cae1a03 100644
--- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementImpl.java
+++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementImpl.java
@@ -23,7 +23,7 @@
/** Implements {@link StateBasedEndorsement}. */
public final class StateBasedEndorsementImpl implements StateBasedEndorsement {
- @SuppressWarnings("PMD.ProperLogger") // PMD 7.7.0 reports a false positive
+ @SuppressWarnings("PMD.ProperLogger") // PMD 7.12.0 reports a false positive
private static final Log LOGGER = LogFactory.getLog(StateBasedEndorsementImpl.class);
private final Map orgs = new HashMap<>();
diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/InvocationTaskManager.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/InvocationTaskManager.java
index aecc8e64d..bbed26d76 100644
--- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/InvocationTaskManager.java
+++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/InvocationTaskManager.java
@@ -183,9 +183,6 @@ private void processChaincodeMessage(final ChaincodeMessage chaincodeMessage) {
case READY:
handleMsg(chaincodeMessage, msgType);
break;
- default:
- LOGGER.warning(() -> String.format(CANNOT_HANDLE_FORMAT, chaincodeMessage.getTxid(), msgType));
- break;
}
}
diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java
index 54a3034f0..4801ebe33 100644
--- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java
+++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java
@@ -13,7 +13,7 @@
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.grpc.v1_6.GrpcTelemetry;
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
-import io.opentelemetry.semconv.ResourceAttributes;
+import io.opentelemetry.semconv.ServiceAttributes;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@@ -32,7 +32,7 @@ public final class OpenTelemetryTracesProvider implements TracesProvider {
@Override
public void initialize(final Properties props) {
String serviceName = props.getProperty(CORE_CHAINCODE_ID_NAME, "unknown");
- props.setProperty(ResourceAttributes.SERVICE_NAME.getKey(), serviceName);
+ props.setProperty(ServiceAttributes.SERVICE_NAME.getKey(), serviceName);
OpenTelemetry openTelemetry = AutoConfiguredOpenTelemetrySdk.builder()
.addPropertiesSupplier(() -> getOpenTelemetryProperties(props))
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index a4b76b953..1b33c55ba 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index e2847c820..ff23a68d7 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
index f5feea6d6..23d15a936 100755
--- a/gradlew
+++ b/gradlew
@@ -86,8 +86,7 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
-APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
-' "$PWD" ) || exit
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -115,7 +114,7 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM.
@@ -206,7 +205,7 @@ fi
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
@@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
+ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
diff --git a/gradlew.bat b/gradlew.bat
index 9b42019c7..5eed7ee84 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -70,11 +70,11 @@ goto fail
:execute
@rem Setup the command line
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+set CLASSPATH=
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell