import java.util.Properties val props: Properties = Properties().apply { load(file("conf/ejbca.properties").inputStream()) } // Specify what edition you want to build by passing -Pedition=ee or =ce (default: ee) val editionProp = providers.gradleProperty("edition").getOrElse("ee") val eeModuleExists = file("modules/edition-specific-ee").exists() val edition = if (editionProp == "ce" || !eeModuleExists) "ce" else "ee" allprojects { repositories { flatDir { dirs(rootProject.projectDir.resolve("lib")) dirs(rootProject.projectDir.resolve("lib/jee")) dirs(rootProject.projectDir.resolve("lib/ext")) dirs(rootProject.projectDir.resolve("lib/hibernate")) dirs(rootProject.projectDir.resolve("lib/xstream")) dirs(rootProject.projectDir.resolve("lib/jee/soapclient")) dirs(rootProject.projectDir.resolve("lib/ext/jackson2")) dirs(rootProject.projectDir.resolve("lib/swagger")) dirs(rootProject.projectDir.resolve("lib/ext/swagger")) dirs(rootProject.projectDir.resolve("lib/primefaces")) dirs(rootProject.projectDir.resolve("lib/ct")) } } extra["edition"] = edition } plugins { ear } configurations { // Custom configuration for jar files that are both modules and lib create("earlibanddeploy") } dependencies { "earlibanddeploy"(project(path = ":modules:ejbca-ejb", configuration = "archives")) deploy(project(path = ":modules:cesecore-ejb", configuration = "archives")) deploy(project(path = ":modules:ejbca-ws", configuration = "archives")) deploy(project(path = ":modules:admin-gui", configuration = "archives")) deploy(project(path = ":modules:ejbca-cmp-war", configuration = "archives")) deploy(project(path = ":modules:ejbca-scep-war", configuration = "archives")) deploy(project(path = ":modules:healthcheck-war", configuration = "archives")) deploy(project(path = ":modules:clearcache-war", configuration = "archives")) deploy(project(path = ":modules:ejbca-webdist-war", configuration = "archives")) deploy(project(path = ":modules:va", configuration = "archives")) deploy(project(path = ":modules:certificatestore", configuration = "archives")) deploy(project(path = ":modules:crlstore", configuration = "archives")) deploy(project(path = ":modules:ra-gui", configuration = "archives")) if (edition == "ee") { "earlibanddeploy"(project(path = ":modules:edition-specific-ee", configuration = "archives")) deploy(project(path = ":modules:statedump:ejb", configuration = "archives")) deploy(project(path = ":modules:configdump:ejb", configuration = "archives")) deploy(project(path = ":modules:peerconnector:rar", configuration = "archives")) deploy(project(path = ":modules:peerconnector:war", configuration = "archives")) deploy(project(path = ":modules:peerconnector:ejb", configuration = "archives")) deploy(project(path = ":modules:acme", configuration = "archives")) deploy(project(path = ":modules:ssh:war", configuration = "archives")) deploy(project(path = ":modules:msae", configuration = "archives")) deploy(project(path = ":modules:cits", configuration = "archives")) deploy(project(path = ":modules:est", configuration = "archives")) deploy(project(path = ":modules:ejbca-rest-api", configuration = "archives")) earlib(project(path = ":modules:statedump:common", configuration = "archives")) earlib(project(path = ":modules:configdump:common", configuration = "archives")) earlib(project(path = ":modules:peerconnector:ra", configuration = "archives")) earlib(project(path = ":modules:peerconnector:publ", configuration = "archives")) earlib(project(path = ":modules:peerconnector:interface", configuration = "archives")) earlib(project(path = ":modules:peerconnector:common", configuration = "archives")) earlib(project(path = ":modules:plugins-ee", configuration = "archives")) } if (edition == "ce") { // When edition is CE we use :modules:edition-specific:ejb as a replacement for :modules:edition-specific-ee "earlibanddeploy"(project(path = ":modules:edition-specific:ejb", configuration="archives")) } if (edition == "ee" && !props.getProperty("ejbca.productionmode", "true").toBoolean()) { deploy(":swagger-ui@war") } if (!props.getProperty("ejbca.productionmode", "true").toBoolean()) { deploy(project(":modules:systemtests:ejb")) } // External libraries earlib(libs.bcpkix) earlib(libs.bcprov) earlib(libs.bctls) earlib(libs.bcutil) earlib(libs.cert.cvc) earlib(libs.jldap) earlib(libs.adsddl) earlib(libs.commons.beanutils) earlib(libs.commons.codec) earlib(libs.commons.collections4) earlib(libs.commons.configuration2) earlib(libs.commons.fileupload) earlib(libs.commons.io) earlib(libs.commons.lang) earlib(libs.commons.lang3) earlib(libs.commons.logging) earlib(libs.commons.text) earlib(libs.nimbus.jose.jwt) earlib(libs.httpclient) earlib(libs.httpcore) earlib(libs.httpmime) earlib(libs.json.simple) earlib(libs.jcip.annotations) earlib(libs.snakeyaml) earlib(libs.guava) earlib(libs.caffeine) earlib(libs.jsch) earlib(libs.jna) earlib(libs.kerb4j.server.common) earlib(libs.kerb.core) earlib(libs.kerby.asn1) earlib(libs.kerb.crypto) earlib(libs.x509.common.util) earlib(libs.cryptotokens.api) earlib(libs.cryptotokens.impl) earlib(libs.jacknji11) earlib(libs.log4j.v12.api) earlib(libs.log4j.api) earlib(libs.log4j.core) // Jackson earlib(libs.jackson.annotations) earlib(libs.jackson.core) earlib(libs.jackson.databind) earlib(libs.jackson.dataformat.yaml) // Xstream earlib(libs.xmlpull) earlib(libs.xpp3.min) earlib(libs.xstream) // Internally generated WS files earlib(libs.ejbca.ws.client.gen) // EE Only external libraries if (edition == "ee") { earlib(libs.ctlog) earlib(libs.dnsjava) earlib(libs.protobuf.java) earlib(libs.p11ng) } // Internal modules packaged as libraries earlib(project(path = ":modules:cesecore-common", configuration = "archives")) earlib(project(path = ":modules:cesecore-entity", configuration = "archives")) earlib(project(path = ":modules:cesecore-ejb-interface", configuration = "archives")) earlib(project(path = ":modules:cesecore-x509ca", configuration = "archives")) earlib(project(path = ":modules:ejbca-common", configuration = "archives")) earlib(project(path = ":modules:ejbca-common-web", configuration = "archives")) earlib(project(path = ":modules:ejbca-ejb-interface", configuration = "archives")) earlib(project(path = ":modules:ejbca-entity", configuration = "archives")) earlib(project(path = ":modules:ejbca-ws:common", configuration = "archives")) earlib(project(path = ":modules:va:extensions", configuration = "archives")) earlib(project(path = ":modules:ejbca-properties", configuration = "archives")) earlib(project(path = ":modules:edition-specific:interface", configuration = "archives")) earlib(project(path = ":modules:plugins", configuration = "archives")) earlib(project(path = ":modules:ejbca-ws-cli", configuration = "archives")) if (edition == "ee") { earlib(project(path = ":modules:cesecore-cvcca", configuration = "archives")) earlib(project(path = ":modules:acme:common", configuration = "archives")) earlib(project(path = ":modules:ssh:common", configuration = "archives")) earlib(project(path = ":modules:cits:common", configuration = "archives")) earlib(project(path = ":modules:proxy-ca", configuration = "archives")) earlib(project(path = ":modules:caa", configuration = "archives")) earlib(project(path = ":modules:ct", configuration = "archives")) } if (!props.getProperty("ejbca.productionmode", "true").toBoolean()) { "earlibanddeploy"(project(":modules:systemtests:common")) earlib(project(":modules:systemtests:interface")) } } tasks.ear { generateDeploymentDescriptor = false from("src/deploy/ear/META-INF") { include("application.xml") filter { line: String -> line.replace("", "status.war/ejbca/publicweb/status") .replace("", "certstore.war/ejbca/publicweb/certificates") .replace("", "crlstore.war/ejbca/publicweb/crls") .replace("", "ejbca-ws-ejb.jar") .replace("", "ra-gui.war/ejbca/ra") } if (edition == "ee") { filter { line: String -> line.replace("", "status.war/ejbca/publicweb/status") .replace("", "statedump-ejb.jar") .replace("", "configdump-ejb.jar") .replace("", "peerconnector-ejb.jar") .replace("", "peerconnector.rar") .replace("", "peerconnector.war/ejbca/peer") .replace("", "ejbca-rest-api.war/ejbca/ejbca-rest-api") .replace("", "acme.war/ejbca/acme") .replace("", "msae.war/ejbca/msae") .replace("", "est.war/.well-known/est") .replace("", "ssh.war/ejbca/ssh") .replace("", "swagger-ui.war/ejbca/swagger-ui") .replace("", "cits.war/ejbca/its") } } if (!props.getProperty("ejbca.productionmode", "true").toBoolean()) { filter { line: String -> line.replace("", "systemtests-ejb.jar") } } include("jboss-deployment-structure.xml") include("services/*") into("META-INF") } from(configurations["earlibanddeploy"]) { into("lib") } from(configurations["earlibanddeploy"]) { into("/") } } task("deployear") { dependsOn("ear") val appServerHome = System.getenv("APPSRV_HOME") doFirst { if (appServerHome == null) { throw GradleException("APPSRV_HOME environment variable is not set.") } } from(layout.buildDirectory.file("libs/ejbca.ear")) into("$appServerHome/standalone/deployments") doLast { println("Deployed EAR to application server at $appServerHome") } } // Import all Ant targets from build.xml and make them available as Gradle tasks. // NOTE: This is a migration convenience that should gradually be phased out in favor of native Gradle tasks. ant.importBuild("$projectDir/build.xml") { antTargetName -> // append "-ant" to Ant targets whoese names match existing Gradle tasks val overlapingTargetNames = arrayOf("build", "clean", "deployear") if (antTargetName in overlapingTargetNames) { antTargetName + "-ant" } else { // Gradle doesn't allow task names to contain the ":" character, so let's remap Ant tasks that contain it. antTargetName.replace(":", "-") } }