blob: 61125d38a0a5dd2eabd0824343f3b5571b6a09ff [file] [log] [blame]
/********************************************************************************
* Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
********************************************************************************/
plugins {
id 'war'
id 'maven-publish'
id 'eclipse'
id 'jacoco'
id "org.sonarqube" version "2.5"
id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.15"
}
description = 'MDM Nucleus'
subprojects {
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute module("de.rechner:openatfx") using project(":api:atfxadapter:openatfx")
}
}
group = rootProject.group
version = rootProject.version
apply plugin: 'eclipse'
apply plugin: 'java-library'
apply plugin: 'maven-publish'
apply plugin: 'jacoco'
dependencies {
compileOnly 'org.slf4j:slf4j-api:1.7.25'
compileOnly 'javax:javaee-api:7.0'
implementation 'io.swagger.core.v3:swagger-annotations:2.2.15'
implementation 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.9.2'
runtimeOnly 'ch.qos.logback:logback-classic:1.2.3'
testImplementation 'junit:junit:4.12'
testImplementation 'org.assertj:assertj-core:3.6.2'
testImplementation 'org.mockito:mockito-core:2.13.0'
testImplementation 'javax:javaee-api:7.0'
}
java {
withSourcesJar()
manifest {
attributes(
'Build-Timestamp': new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(new Date()),
'Build-Revision' : versioning.info.commit,
)
}
}
/*task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}*/
artifacts {
archives sourcesJar
}
}
def isHeadless() {
return project.hasProperty('headless') && (headless.empty || headless.toBoolean())
}
project(":nucleus:webclient") {
if (isHeadless()) {
println 'Headless build! Webclient will not be included into web archive. To build and include the webclient remove the property headless or set -Pheadless=false.'
project.tasks.all { task -> task.enabled = false }
}
}
configurations {
runtime {
resolutionStrategy.dependencySubstitution {
substitute module("de.rechner:openatfx") using project(":api:atfxadapter:openatfx")
}
exclude group: 'com.sun.mail', module: 'javax.mail'
exclude group: 'javax.ws.rs', module: 'javax.ws.rs-api'
exclude group: 'javax.activation', module: 'activation'
exclude group: 'javax.annotation', module: 'javax.annotation-api'
exclude group: 'javax.inject', module: 'javax.inject'
exclude group: 'org.glassfish.hk2.external', module: 'javax.inject'
exclude group: 'commons-logging', module: 'commons-logging'
// exclude guava dependencies
exclude group: 'com.google.code.findbugs', module: 'jsr305'
exclude group: 'com.google.errorprone', module: 'error_prone_annotations'
exclude group: 'com.google.j2objc', module: 'j2objc-annotations'
exclude group: 'org.codehaus.mojo', module: 'animal-sniffer-annotations'
exclude group: 'org.checkerframework', module: 'checker-compat-qual'
}
// see: https://github.com/swagger-api/swagger-core/issues/3335
// and: https://stackoverflow.com/questions/58557741/gradle-plugin-uses-a-older-different-version-of-a-java-library-used-in-the-code
swagger {
extendsFrom runtimeClasspath
resolutionStrategy {
force 'com.fasterxml.jackson.core:jackson-core:2.13.3'
force 'com.fasterxml.jackson.core:jackson-databind:2.13.3'
}
}
}
dependencies {
implementation project(':nucleus:application')
implementation project(':nucleus:apicopy')
implementation project(":nucleus:importscheduler")
implementation 'io.swagger.core.v3:swagger-annotations:2.2.15'
implementation 'org.webjars:swagger-ui:3.23.0'
// adapters
runtimeOnly project(':api:atfxadapter')
runtimeOnly project(":api:odsadapter")
runtimeOnly project(":api:csvadapter")
if (!isHeadless()) {
runtimeOnly project(':nucleus:webclient')
}
}
resolve {
outputPath = file('build/openapi')
outputFileName = 'openapi'
outputFormat = 'JSONANDYAML'
prettyPrint = 'TRUE'
classpath = sourceSets.main.output + configurations.swagger
resourcePackages = ['org.eclipse.mdm']
openApiFile = file('src/main/openapi/openApiFile.json')
}
tasks.war.dependsOn("resolve")
task collectConfiguration() {
doLast {
subprojects.each { subproject ->
copy {
from "${project.projectDir}/${subproject.name}/src/main/configuration/"
into "${project.projectDir}/build/tmp/openmdm_application/configuration/org.eclipse.mdm.${subproject.name}"
}
}
}
}
task copySchema(dependsOn: ':nucleus:preferences:generateSchema') {
doLast {
copy {
from "${project.projectDir}/preferences/build/generated-schema/"
into "${project.projectDir}/build/tmp/openmdm_application/schema/org.eclipse.mdm.preferences"
}
copy {
from "${project.projectDir}/preferences/src/main/sql/"
into "${project.projectDir}/build/tmp/openmdm_application/schema/update"
}
}
}
task distribute(type: Zip) {
archiveFileName = "openMDM_application-${version}.zip"
from "../LICENSE.txt"
from "../NOTICE.txt"
from "../CONTRIBUTING.md"
from "../README.md"
from "../SECURITY.md"
from "../release_notes.md"
from "../doc/GettingStarted_mdmbl.pdf"
from "../doc/Installation Guide for the openMDM5 Application.pdf"
from "${project.projectDir}/build/tmp/openmdm_application"
from "${project.projectDir}/build/libs/"
}
distribute.dependsOn(collectConfiguration)
distribute.dependsOn(copySchema)
war {
manifest {
attributes(
'Build-Timestamp': new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(new Date()),
'Build-Revision' : versioning.info.commit,
)
}
archiveBaseName = 'org.eclipse.mdm.nucleus'
from ('application/build/node/dist') {
include('**/*')
}
from ("${project.projectDir}/build/openapi/") {
include('**/*')
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [VERSION: version])
}
from ("application/src/main/webapp/") {
include('**/*')
}
webXml = file('application/src/main/webconfig/web.xml')
webInf {from 'application/src/main/webconfig/glassfish-web.xml'}
metaInf { from '../NOTICE.txt' }
metaInf { from '../LICENSE.txt' }
metaInf { from '../CONTRIBUTING.md' }
metaInf { from '../SECURITY.md' }
}
war.finalizedBy(distribute)
jacoco {
toolVersion = "0.7.6.201602180812"
reportsDirectory = file("${project.buildDir}/jacoco/test.exec")
}
sonarqube {
properties {
property "sonar.java.coveragePlugin", "jacoco"
property "sonar.jacoco.reportPaths", "${project.buildDir}/jacoco/test.exec"
}
}
tasks["sonarqube"].dependsOn "org.eclipse.mdm.application:map_tslint"