mirror of
https://github.com/corda/corda.git
synced 2025-02-21 09:51:57 +00:00
* Move Raft and BFT notaries into separate modules * Move schemas * Fix tests & demos * Modified logic for creating notary services: Added a new field 'className' to the notary configuration. The node now loads the specified implementation via reflection. The default className value points to the simple notary implementation for backwards compatibility. Relevant schemas are loaded in a similar fashion. For backwards compatibility purposes the default SimpleNotaryService will remain built-in to node, but its cordapp will be generated on startup – so the loading of notary services is streamlined. * Move test namedcache factory to test utils
454 lines
17 KiB
Groovy
454 lines
17 KiB
Groovy
buildscript {
|
|
// For sharing constants between builds
|
|
Properties constants = new Properties()
|
|
file("$projectDir/constants.properties").withInputStream { constants.load(it) }
|
|
|
|
// Our version: bump this on release.
|
|
ext.corda_release_version = "4.0-SNAPSHOT"
|
|
ext.corda_platform_version = constants.getProperty("platformVersion")
|
|
ext.gradle_plugins_version = constants.getProperty("gradlePluginsVersion")
|
|
|
|
// Dependency versions. Can run 'gradle dependencyUpdates' to find new versions of things.
|
|
//
|
|
// TODO: Sort this alphabetically.
|
|
ext.kotlin_version = constants.getProperty("kotlinVersion")
|
|
|
|
ext.quasar_group = 'co.paralleluniverse'
|
|
ext.quasar_version = '0.7.10'
|
|
|
|
// gradle-capsule-plugin:1.0.2 contains capsule:1.0.1 by default.
|
|
// We must configure it manually to use the latest capsule version.
|
|
ext.capsule_version = '1.0.3'
|
|
|
|
ext.asm_version = '5.0.4'
|
|
ext.artemis_version = '2.6.2'
|
|
ext.jackson_version = '2.9.5'
|
|
ext.jetty_version = '9.4.7.v20170914'
|
|
ext.jersey_version = '2.25'
|
|
ext.assertj_version = '3.8.0'
|
|
ext.slf4j_version = '1.7.25'
|
|
ext.log4j_version = '2.9.1'
|
|
ext.bouncycastle_version = constants.getProperty("bouncycastleVersion")
|
|
ext.guava_version = constants.getProperty("guavaVersion")
|
|
ext.caffeine_version = constants.getProperty("caffeineVersion")
|
|
ext.disruptor_version = constants.getProperty("disruptorVersion")
|
|
ext.metrics_version = constants.getProperty("metricsVersion")
|
|
ext.metrics_new_relic_version = constants.getProperty("metricsNewRelicVersion")
|
|
ext.okhttp_version = '3.5.0'
|
|
ext.netty_version = '4.1.22.Final'
|
|
ext.typesafe_config_version = constants.getProperty("typesafeConfigVersion")
|
|
ext.fileupload_version = '1.3.3'
|
|
ext.junit_version = '4.12'
|
|
ext.mockito_version = '2.18.3'
|
|
ext.hamkrest_version = '1.4.2.2'
|
|
ext.jopt_simple_version = '5.0.2'
|
|
ext.jansi_version = '1.14'
|
|
ext.hibernate_version = '5.2.6.Final'
|
|
ext.h2_version = '1.4.197' // Update docs if renamed or removed.
|
|
ext.postgresql_version = '42.1.4'
|
|
ext.rxjava_version = '1.3.8'
|
|
ext.dokka_version = '0.9.17'
|
|
ext.eddsa_version = '0.2.0'
|
|
ext.dependency_checker_version = '3.1.0'
|
|
ext.commons_collections_version = '4.1'
|
|
ext.beanutils_version = '1.9.3'
|
|
ext.crash_version = 'cadb53544fbb3c0fb901445da614998a6a419488'
|
|
ext.jsr305_version = constants.getProperty("jsr305Version")
|
|
ext.shiro_version = '1.4.0'
|
|
ext.artifactory_plugin_version = constants.getProperty('artifactoryPluginVersion')
|
|
ext.liquibase_version = '3.5.5'
|
|
ext.artifactory_contextUrl = 'https://ci-artifactory.corda.r3cev.com/artifactory'
|
|
ext.snake_yaml_version = constants.getProperty('snakeYamlVersion')
|
|
ext.docker_compose_rule_version = '0.33.0'
|
|
ext.selenium_version = '3.8.1'
|
|
ext.ghostdriver_version = '2.1.0'
|
|
ext.eaagentloader_version = '1.0.3'
|
|
ext.proguard_version = constants.getProperty('proguardVersion')
|
|
ext.jsch_version = '0.1.54'
|
|
ext.commons_cli_version = '1.4'
|
|
ext.protonj_version = '0.27.1' // This is now aligned with the Artemis version, but retaining in case we ever need to diverge again for a bug fix.
|
|
ext.snappy_version = '0.4'
|
|
ext.fast_classpath_scanner_version = '2.12.3'
|
|
ext.jcabi_manifests_version = '1.1'
|
|
ext.picocli_version = '3.5.2'
|
|
|
|
// Name of the IntelliJ SDK created for the deterministic Java rt.jar.
|
|
// ext.deterministic_idea_sdk = '1.8 (Deterministic)'
|
|
|
|
// Update 121 is required for ObjectInputFilter.
|
|
// Updates [131, 161] also have zip compression bugs on MacOS (High Sierra).
|
|
// when the java version in NodeStartup.hasMinimumJavaVersion() changes, so must this check
|
|
ext.java8_minUpdateVersion = '171'
|
|
|
|
repositories {
|
|
mavenLocal()
|
|
mavenCentral()
|
|
jcenter()
|
|
// This repository is needed for Dokka until 0.9.16 is released.
|
|
maven {
|
|
url 'https://dl.bintray.com/kotlin/kotlin-eap/'
|
|
}
|
|
maven {
|
|
url "$artifactory_contextUrl/corda-releases"
|
|
}
|
|
}
|
|
dependencies {
|
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
|
|
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
|
|
classpath "net.corda.plugins:publish-utils:$gradle_plugins_version"
|
|
classpath "net.corda.plugins:quasar-utils:$gradle_plugins_version"
|
|
classpath "net.corda.plugins:cordformation:$gradle_plugins_version"
|
|
classpath "net.corda.plugins:cordapp:$gradle_plugins_version"
|
|
classpath "net.corda.plugins:api-scanner:$gradle_plugins_version"
|
|
classpath "net.corda.plugins:jar-filter:$gradle_plugins_version"
|
|
classpath "net.sf.proguard:proguard-gradle:$proguard_version"
|
|
classpath 'com.github.ben-manes:gradle-versions-plugin:0.15.0'
|
|
classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
|
|
classpath "org.jetbrains.dokka:dokka-gradle-plugin:${dokka_version}"
|
|
classpath "net.i2p.crypto:eddsa:$eddsa_version" // Needed for ServiceIdentityGenerator in the build environment.
|
|
classpath "org.owasp:dependency-check-gradle:${dependency_checker_version}"
|
|
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:$artifactory_plugin_version"
|
|
}
|
|
}
|
|
|
|
plugins {
|
|
// TODO The capsule plugin requires the newer DSL plugin block.It would be nice if we could unify all the plugins into one style,
|
|
// but the DSL has some restrictions e.g can't be used on the allprojects section. So we should revisit this if there are improvements in Gradle.
|
|
// Version 1.0.2 of this plugin uses capsule:1.0.1 by default.
|
|
id 'us.kirchmeier.capsule' version '1.0.2' apply false
|
|
|
|
// Add the shadow plugin to the plugins classpath for the entire project.
|
|
id 'com.github.johnrengelman.shadow' version '2.0.4' apply false
|
|
id "com.gradle.build-scan" version "1.16"
|
|
}
|
|
|
|
ext {
|
|
corda_revision = "git rev-parse HEAD".execute().text.trim()
|
|
}
|
|
|
|
apply plugin: 'project-report'
|
|
apply plugin: 'com.github.ben-manes.versions'
|
|
apply plugin: 'net.corda.plugins.publish-utils'
|
|
apply plugin: 'maven-publish'
|
|
apply plugin: 'com.jfrog.artifactory'
|
|
|
|
// We need the following three lines even though they're inside an allprojects {} block below because otherwise
|
|
// IntelliJ gets confused when importing the project and ends up erasing and recreating the .idea directory, along
|
|
// with the run configurations. It also doesn't realise that the project is a Java 8 project and misconfigures
|
|
// the resulting import. This fixes it.
|
|
apply plugin: 'java'
|
|
sourceCompatibility = 1.8
|
|
targetCompatibility = 1.8
|
|
|
|
|
|
allprojects {
|
|
apply plugin: 'kotlin'
|
|
apply plugin: 'jacoco'
|
|
apply plugin: 'org.owasp.dependencycheck'
|
|
apply plugin: 'kotlin-allopen'
|
|
|
|
allOpen {
|
|
annotations(
|
|
"javax.persistence.Entity",
|
|
"javax.persistence.Embeddable",
|
|
"javax.persistence.MappedSuperclass"
|
|
)
|
|
}
|
|
|
|
dependencyCheck {
|
|
suppressionFile = '.ci/dependency-checker/suppressedLibraries.xml'
|
|
cveValidForHours = 1
|
|
format = 'ALL'
|
|
}
|
|
sourceCompatibility = 1.8
|
|
targetCompatibility = 1.8
|
|
|
|
tasks.withType(JavaCompile) {
|
|
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" << "-Xlint:-options" << "-parameters"
|
|
options.encoding = 'UTF-8'
|
|
}
|
|
|
|
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
|
|
kotlinOptions {
|
|
languageVersion = "1.2"
|
|
apiVersion = "1.2"
|
|
jvmTarget = "1.8"
|
|
javaParameters = true // Useful for reflection.
|
|
freeCompilerArgs = ['-Xjvm-default=compatibility']
|
|
allWarningsAsErrors = project.hasProperty('compilation.allWarningsAsErrors') ? project.property('compilation.allWarningsAsErrors').toBoolean() : false
|
|
}
|
|
}
|
|
|
|
tasks.withType(Jar) { task ->
|
|
// Includes War and Ear
|
|
manifest {
|
|
attributes('Corda-Release-Version': corda_release_version)
|
|
attributes('Corda-Platform-Version': corda_platform_version)
|
|
attributes('Corda-Revision': corda_revision)
|
|
attributes('Corda-Vendor': 'Corda Open Source')
|
|
attributes('Automatic-Module-Name': "net.corda.${task.project.name.replaceAll('-', '.')}")
|
|
}
|
|
}
|
|
|
|
tasks.withType(Test) {
|
|
failFast = project.hasProperty('tests.failFast') ? project.property('tests.failFast').toBoolean() : false
|
|
|
|
// Prevent the project from creating temporary files outside of the build directory.
|
|
systemProperty 'java.io.tmpdir', buildDir.absolutePath
|
|
|
|
if (System.getProperty("test.maxParallelForks") != null) {
|
|
maxParallelForks = Integer.valueOf(System.getProperty("test.maxParallelForks"))
|
|
logger.debug("System property test.maxParallelForks found - setting max parallel forks to $maxParallelForks for $project")
|
|
}
|
|
|
|
if (project.path.startsWith(':experimental') && System.getProperty("experimental.test.enable") == null) {
|
|
enabled = false
|
|
}
|
|
|
|
// Required to use Gradle build cache (until Gradle 5.0 is released with default value of "append" set to false)
|
|
// See https://github.com/gradle/gradle/issues/5269 and https://github.com/gradle/gradle/pull/6419
|
|
extensions.configure(TypeOf.typeOf(JacocoTaskExtension)) { ex ->
|
|
ex.append = false
|
|
}
|
|
}
|
|
|
|
group 'net.corda'
|
|
version "$corda_release_version"
|
|
|
|
repositories {
|
|
mavenLocal()
|
|
mavenCentral()
|
|
jcenter()
|
|
maven { url "$artifactory_contextUrl/corda-dependencies" }
|
|
maven { url 'https://jitpack.io' }
|
|
}
|
|
|
|
configurations {
|
|
all {
|
|
resolutionStrategy {
|
|
// Force dependencies to use the same version of Kotlin as Corda.
|
|
force "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
|
force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
|
force "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
|
|
|
|
// Force dependencies to use the same version of Guava as Corda.
|
|
force "com.google.guava:guava:$guava_version"
|
|
|
|
// Demand that everything uses our given version of Netty.
|
|
eachDependency { details ->
|
|
if (details.requested.group == 'io.netty' && details.requested.name.startsWith('netty-')) {
|
|
details.useVersion netty_version
|
|
}
|
|
}
|
|
}
|
|
}
|
|
compile {
|
|
// We want to use SLF4J's version of these bindings: jcl-over-slf4j
|
|
// Remove any transitive dependency on Apache's version.
|
|
exclude group: 'commons-logging', module: 'commons-logging'
|
|
// Remove any transitive dependency on Logback (e.g. Liquibase 3.6 introduces this dependency)
|
|
exclude group: 'ch.qos.logback'
|
|
|
|
// Netty-All is an uber-jar which contains every Netty module.
|
|
// Exclude it to force us to use the individual Netty modules instead.
|
|
exclude group: 'io.netty', module: 'netty-all'
|
|
}
|
|
runtime {
|
|
// We never want isolated.jar on classPath, since we want to test jar being dynamically loaded as an attachment
|
|
exclude module: 'isolated'
|
|
}
|
|
}
|
|
}
|
|
|
|
// Check that we are running on a Java 8 JDK. The source/targetCompatibility values above aren't sufficient to
|
|
// guarantee this because those are properties checked by the Java plugin, but we're using Kotlin.
|
|
//
|
|
// We recommend a specific minor version (unfortunately, not checkable directly) because JavaFX adds APIs in
|
|
// minor releases, so we can't work with just any Java 8, it has to be a recent one.
|
|
if (!JavaVersion.current().java8Compatible)
|
|
throw new GradleException("Corda requires Java 8, please upgrade to at least 1.8.0_$java8_minUpdateVersion")
|
|
|
|
// Required for building out the fat JAR.
|
|
dependencies {
|
|
compile project(':node')
|
|
compile "com.google.guava:guava:$guava_version"
|
|
|
|
// Set to corda compile to ensure it exists now deploy nodes no longer relies on build
|
|
compile project(path: ":node:capsule", configuration: 'runtimeArtifacts')
|
|
compile project(path: ":webserver:webcapsule", configuration: 'runtimeArtifacts')
|
|
|
|
// For the buildCordappDependenciesJar task
|
|
runtime project(':client:jfx')
|
|
runtime project(':client:mock')
|
|
runtime project(':client:rpc')
|
|
runtime project(':core')
|
|
runtime project(':confidential-identities')
|
|
runtime project(':finance')
|
|
runtime project(':webserver')
|
|
testCompile project(':test-utils')
|
|
}
|
|
|
|
jar {
|
|
// Prevent the root project from building an unwanted dummy CorDapp.
|
|
enabled = false
|
|
}
|
|
|
|
task jacocoRootReport(type: org.gradle.testing.jacoco.tasks.JacocoReport) {
|
|
dependsOn = subprojects.test
|
|
additionalSourceDirs = files(subprojects.sourceSets.main.allSource.srcDirs)
|
|
sourceDirectories = files(subprojects.sourceSets.main.allSource.srcDirs)
|
|
classDirectories = files(subprojects.sourceSets.main.output)
|
|
executionData = files(subprojects.jacocoTestReport.executionData)
|
|
reports {
|
|
html.enabled = true
|
|
xml.enabled = true
|
|
csv.enabled = false
|
|
}
|
|
onlyIf = {
|
|
true
|
|
}
|
|
doFirst {
|
|
executionData = files(executionData.findAll {
|
|
it.exists()
|
|
})
|
|
}
|
|
}
|
|
|
|
tasks.withType(Test) {
|
|
reports.html.destination = file("${reporting.baseDir}/${name}")
|
|
}
|
|
|
|
task testReport(type: TestReport) {
|
|
destinationDir = file("$buildDir/reports/allTests")
|
|
// Include the results from the `test` task in all subprojects
|
|
reportOn subprojects*.test
|
|
}
|
|
|
|
bintrayConfig {
|
|
user = System.getenv('CORDA_BINTRAY_USER')
|
|
key = System.getenv('CORDA_BINTRAY_KEY')
|
|
repo = 'corda'
|
|
org = 'r3'
|
|
licenses = ['Apache-2.0']
|
|
vcsUrl = 'https://github.com/corda/corda'
|
|
projectUrl = 'https://github.com/corda/corda'
|
|
gpgSign = true
|
|
gpgPassphrase = System.getenv('CORDA_BINTRAY_GPG_PASSPHRASE')
|
|
publications = [
|
|
'corda-jfx',
|
|
'corda-mock',
|
|
'corda-rpc',
|
|
'corda-core',
|
|
'corda-core-deterministic',
|
|
'corda-deterministic-verifier',
|
|
'corda-djvm',
|
|
'corda',
|
|
'corda-finance',
|
|
'corda-node',
|
|
'corda-node-api',
|
|
'corda-test-common',
|
|
'corda-test-utils',
|
|
'corda-jackson',
|
|
'corda-webserver-impl',
|
|
'corda-webserver',
|
|
'corda-node-driver',
|
|
'corda-confidential-identities',
|
|
'corda-shell',
|
|
'corda-tools-shell-cli',
|
|
'corda-serialization',
|
|
'corda-serialization-deterministic',
|
|
'corda-tools-blob-inspector',
|
|
'corda-tools-explorer',
|
|
'corda-tools-network-bootstrapper',
|
|
'corda-tools-cliutils',
|
|
'corda-notary-raft',
|
|
'corda-notary-bft-smart'
|
|
]
|
|
license {
|
|
name = 'Apache-2.0'
|
|
url = 'https://www.apache.org/licenses/LICENSE-2.0'
|
|
distribution = 'repo'
|
|
}
|
|
developer {
|
|
id = 'R3'
|
|
name = 'R3'
|
|
email = 'dev@corda.net'
|
|
}
|
|
}
|
|
|
|
// Build a ZIP of all JARs required to compile the Cordapp template
|
|
// Note: corda.jar is used at runtime so no runtime ZIP is necessary.
|
|
// Resulting ZIP can be found in "build/distributions"
|
|
task buildCordappDependenciesZip(type: Zip) {
|
|
baseName 'corda-deps'
|
|
from configurations.runtime
|
|
from configurations.compile
|
|
from configurations.testCompile
|
|
from buildscript.configurations.classpath
|
|
from 'node/capsule/NOTICE' // CDDL notice
|
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
}
|
|
|
|
artifactory {
|
|
publish {
|
|
contextUrl = artifactory_contextUrl
|
|
repository {
|
|
repoKey = 'corda-dev'
|
|
username = System.getenv('CORDA_ARTIFACTORY_USERNAME')
|
|
password = System.getenv('CORDA_ARTIFACTORY_PASSWORD')
|
|
}
|
|
|
|
defaults {
|
|
// Root project applies the plugin (for this block) but does not need to be published
|
|
if (project != rootProject) {
|
|
publications(project.extensions.publish.name())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
task generateApi(type: net.corda.plugins.GenerateApi) {
|
|
baseName = "api-corda"
|
|
}
|
|
|
|
// This exists to reduce CI build time when the envvar is set (can save up to 40 minutes)
|
|
if (file('corda-docs-only-build').exists() || (System.getenv('CORDA_DOCS_ONLY_BUILD') != null)) {
|
|
if (file('corda-docs-only-build').exists()) {
|
|
logger.info("Tests are disabled due to presence of file 'corda-docs-only-build' in the project root")
|
|
} else {
|
|
logger.info("Tests are disabled due to the presence of envvar CORDA_DOCS_ONLY_BUILD")
|
|
}
|
|
|
|
allprojects {
|
|
test {
|
|
exclude '*/**'
|
|
}
|
|
|
|
it.afterEvaluate {
|
|
if (it.tasks.findByName("integrationTest") != null) {
|
|
integrationTest {
|
|
exclude '*/**'
|
|
}
|
|
}
|
|
}
|
|
|
|
it.afterEvaluate {
|
|
if (it.tasks.findByName("smokeTest") != null) {
|
|
smokeTest {
|
|
exclude '*/**'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
wrapper {
|
|
gradleVersion = "4.10.1"
|
|
distributionType = Wrapper.DistributionType.ALL
|
|
}
|
|
|
|
buildScan {
|
|
termsOfServiceUrl = 'https://gradle.com/terms-of-service'
|
|
termsOfServiceAgree = 'yes'
|
|
} |