mirror of
https://github.com/corda/corda.git
synced 2024-12-28 00:38:55 +00:00
1ecf646f7e
* Sql setup scripts for Oracle and datasource configuration. * CashSelection for Oracle. * Workaround of forbidden distinct for BLOBs. * ojdbc8.jar driver dependency from Oracle Maven repository, ojdbc6.jar from lib (it's not in Maven repo). * allow to use random Port in node names and trim it from schema name, remove schema with port numbers from db setup (to cater for new test, non Oracle specific change) * Removed unnecessary code from ConfigUtilities (non Oracle specific change) * Removed db integration tests setup for RPCStabilityTest as it doesn't start any nodes
406 lines
15 KiB
Groovy
406 lines
15 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 = "R3.CORDA-3.0-SNAPSHOT" // "CORDA-3.0-SNAPSHOT" for Corda (Open Source)
|
|
ext.corda_release_distribution = "com.r3.corda" // "net.corda" for Corda (Open Source)
|
|
|
|
// Increment this on any release that changes public APIs anywhere in the Corda platform
|
|
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_version = '0.7.9'
|
|
|
|
// gradle-capsule-plugin:1.0.2 contains capsule:1.0.1
|
|
// TODO: Upgrade gradle-capsule-plugin to a version with capsule:1.0.3
|
|
ext.capsule_version = '1.0.1'
|
|
|
|
ext.asm_version = '0.5.3'
|
|
|
|
/*
|
|
* TODO Upgrade to version 2.4 for large message streaming support
|
|
*
|
|
* Due to a memory leak in the connection handling code in Artemis, we are
|
|
* temporarily downgrading to version 2.2.0.
|
|
*
|
|
* The memory leak essentially triggers an out-of-memory exception within
|
|
* less than 10 seconds and can take down a node if a non-TLS connection is
|
|
* attempted against the P2P port.
|
|
*
|
|
* The issue has been reported to upstream:
|
|
* https://issues.apache.org/jira/browse/ARTEMIS-1559
|
|
*/
|
|
ext.artemis_version = '2.2.0'
|
|
ext.jackson_version = '2.9.2'
|
|
ext.jetty_version = '9.4.7.v20170914'
|
|
ext.jersey_version = '2.25'
|
|
ext.jolokia_version = '1.3.7'
|
|
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.okhttp_version = '3.5.0'
|
|
ext.netty_version = '4.1.9.Final'
|
|
ext.typesafe_config_version = constants.getProperty("typesafeConfigVersion")
|
|
ext.fileupload_version = '1.3.3'
|
|
ext.junit_version = '4.12'
|
|
ext.mockito_version = '2.10.0'
|
|
ext.jopt_simple_version = '5.0.2'
|
|
ext.jansi_version = '1.14'
|
|
ext.hibernate_version = '5.2.6.Final'
|
|
ext.h2_version = '1.4.194' // Update docs if renamed or removed.
|
|
ext.postgresql_version = '42.1.4'
|
|
ext.rxjava_version = '1.2.4'
|
|
ext.dokka_version = '0.9.16-eap-2'
|
|
ext.eddsa_version = '0.2.0'
|
|
ext.dependency_checker_version = '3.0.1'
|
|
ext.commons_collections_version = '4.1'
|
|
ext.beanutils_version = '1.9.3'
|
|
ext.crash_version = 'cce5a00f114343c1145c1d7756e1dd6df3ea984e'
|
|
ext.jsr305_version = constants.getProperty("jsr305Version")
|
|
ext.spring_jdbc_version ='5.0.0.RELEASE'
|
|
ext.shiro_version = '1.4.0'
|
|
ext.artifactory_plugin_version = constants.getProperty('artifactoryPluginVersion')
|
|
ext.liquibase_version = '3.5.3'
|
|
ext.shadow_version = '2.0.2'
|
|
ext.hikari_version = '2.5.1'
|
|
|
|
// Update 121 is required for ObjectInputFilter and at time of writing 131 was latest:
|
|
ext.java8_minUpdateVersion = '131'
|
|
|
|
repositories {
|
|
mavenLocal()
|
|
mavenCentral()
|
|
jcenter()
|
|
maven {
|
|
url 'https://dl.bintray.com/kotlin/kotlin-eap/'
|
|
}
|
|
}
|
|
dependencies {
|
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$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 '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 "org.ajoberstar:grgit:1.1.0"
|
|
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
|
|
id "us.kirchmeier.capsule" version "1.0.2"
|
|
}
|
|
|
|
ext {
|
|
corda_revision = org.ajoberstar.grgit.Grgit.open(file('.')).head().id
|
|
}
|
|
|
|
apply plugin: 'project-report'
|
|
apply plugin: 'com.github.ben-manes.versions'
|
|
apply plugin: 'net.corda.plugins.publish-utils'
|
|
apply plugin: 'net.corda.plugins.cordformation'
|
|
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: 'java'
|
|
apply plugin: 'jacoco'
|
|
apply plugin: 'org.owasp.dependencycheck'
|
|
|
|
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"
|
|
}
|
|
|
|
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
|
|
kotlinOptions {
|
|
languageVersion = "1.1"
|
|
apiVersion = "1.1"
|
|
jvmTarget = "1.8"
|
|
javaParameters = true // Useful for reflection.
|
|
}
|
|
}
|
|
|
|
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': 'R3 Corda Edition')
|
|
attributes('Automatic-Module-Name': "net.corda.${task.project.name.replaceAll('-', '.')}")
|
|
}
|
|
}
|
|
|
|
tasks.withType(Test) {
|
|
// Prevent the project from creating temporary files outside of the build directory.
|
|
systemProperties['java.io.tmpdir'] = buildDir
|
|
|
|
// Ensures that "net.corda.testing.amqp.enable" is passed correctly from Gradle command line
|
|
// down to JVM executing unit test. It looks like we are running unit tests in the forked mode
|
|
// and all the "-D" parameters passed to Gradle not making it to unit test level
|
|
// TODO: Remove once we fully switched to AMQP
|
|
final AMQP_ENABLE_PROP_NAME = "net.corda.testing.amqp.enable"
|
|
systemProperty(AMQP_ENABLE_PROP_NAME, System.getProperty(AMQP_ENABLE_PROP_NAME))
|
|
|
|
// relational database provider to be used by node
|
|
final DATABASE_PROVIDER = "databaseProvider"
|
|
final DATASOURCE_URL = "dataSourceProperties.dataSource.url"
|
|
final DATASOURCE_CLASSNAME = "dataSourceProperties.dataSourceClassName"
|
|
final DATASOURCE_USER = "dataSourceProperties.dataSource.user"
|
|
final DATASOURCE_PASSWORD = "dataSourceProperties.dataSource.password"
|
|
|
|
// integration testing database configuration (to be used in conjunction with a DATABASE_PROVIDER)
|
|
final TEST_DB_ADMIN_USER = "test.db.admin.user"
|
|
final TEST_DB_ADMIN_PASSWORD = "test.db.admin.password"
|
|
final TEST_DB_SCRIPT_DIR = "test.db.script.dir"
|
|
|
|
[DATABASE_PROVIDER,DATASOURCE_URL, DATASOURCE_CLASSNAME, DATASOURCE_USER, DATASOURCE_PASSWORD,
|
|
TEST_DB_ADMIN_USER, TEST_DB_ADMIN_PASSWORD, TEST_DB_SCRIPT_DIR].forEach {
|
|
def property = System.getProperty(it)
|
|
if (property != null) {
|
|
systemProperty(it, property)
|
|
}
|
|
}
|
|
}
|
|
|
|
group 'com.r3.corda'
|
|
version "$corda_release_version"
|
|
|
|
repositories {
|
|
mavenLocal()
|
|
mavenCentral()
|
|
jcenter()
|
|
maven { url 'https://jitpack.io' }
|
|
maven {
|
|
// For integrationTest task when running against Oracle database the JDBC driver is in Oracle Maven repository with login access only,
|
|
// setup an account on https://login.oracle.com/oaam_server/login.do
|
|
// provide credentials to Gradle task by -PmavenOracleUsername=... -PmavenOraclePassword=...
|
|
url "https://www.oracle.com/content/secure/maven/content"
|
|
credentials {
|
|
username = project.findProperty("mavenOracleUsername") ?: ""
|
|
password = project.findProperty("mavenOraclePassword") ?: ""
|
|
}
|
|
}
|
|
}
|
|
|
|
configurations {
|
|
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'
|
|
}
|
|
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")
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
jcenter()
|
|
}
|
|
|
|
// 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 deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['jar']) {
|
|
directory "./build/nodes"
|
|
node {
|
|
name "O=Controller,OU=corda,L=London,C=GB"
|
|
notary = [validating : true]
|
|
p2pPort 10002
|
|
cordapps = []
|
|
}
|
|
node {
|
|
name "O=Bank A,OU=corda,L=London,C=GB"
|
|
p2pPort 10012
|
|
rpcPort 10013
|
|
webPort 10014
|
|
cordapps = []
|
|
}
|
|
node {
|
|
name "O=Bank B,OU=corda,L=London,C=GB"
|
|
p2pAddress "localhost:10007"
|
|
rpcAddress "localhost:10008"
|
|
webAddress "localhost:10009"
|
|
cordapps = []
|
|
}
|
|
}
|
|
|
|
// User and key are commented out to prevent accidental pushes of R3 Corda to public repos. DO NOT UNCOMMENT.
|
|
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', 'corda-finance', 'corda-node', 'corda-node-api', 'corda-test-common', 'corda-test-utils', 'corda-jackson', 'corda-verifier', 'corda-webserver-impl', 'corda-webserver', 'corda-node-driver', 'corda-confidential-identities', 'doorman', 'doorman-hsm']
|
|
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 = 'https://ci-artifactory.corda.r3cev.com/artifactory'
|
|
repository {
|
|
repoKey = 'enterprise-dev'
|
|
username = 'teamcity'
|
|
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(System.getenv('CORDA_DOCS_ONLY_BUILD') != null) {
|
|
logger.info("Tests are disabled due to 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 '*/**'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|