which broke during the Gradle upgrade in FINERACT-700 do not fix Flyway related migrateTenantDB & Co, as those are proposed to be removed in FINERACT-765 anyway. (If really needed, some of my other WIP branches have the required changes to make the Flyway related tasks work.)
447 lines
12 KiB
Groovy
447 lines
12 KiB
Groovy
/**
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
description = '''\
|
|
Run as:
|
|
gradle clean tomcatrunwar
|
|
'''
|
|
|
|
project.ext.springBootVersion = '1.2.8.RELEASE'
|
|
project.ext.springVersion = '4.1.9.RELEASE'
|
|
project.ext.springOauthVersion = '2.0.4.RELEASE'
|
|
project.ext.jerseyVersion = '1.17'
|
|
project.ext.springDataJpaVersion = '1.7.0.RELEASE' // also change spring-boot-gradle-plugin version below
|
|
|
|
buildscript {
|
|
ext {
|
|
openJPAVersion = '2.4.1'
|
|
}
|
|
repositories {
|
|
jcenter()
|
|
mavenCentral()
|
|
maven { url "https://plugins.gradle.org/m2/" }
|
|
}
|
|
|
|
dependencies {
|
|
classpath 'org.gradle.api.plugins:gradle-tomcat-plugin:1.0',
|
|
'nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0',
|
|
'org.zeroturnaround:gradle-jrebel-plugin:1.1.2',
|
|
'org.springframework.boot:spring-boot-gradle-plugin:2.1.3.RELEASE' // also change springDataJpaVersion below
|
|
classpath "org.apache.openjpa:openjpa-all:$openJPAVersion"
|
|
classpath 'com.radcortez.gradle:openjpa-gradle-plugin:3.0.0'
|
|
classpath 'gradle.plugin.org.nosphere.apache:creadur-rat-gradle:0.2.2'
|
|
}
|
|
}
|
|
|
|
apply plugin: "org.nosphere.apache.rat"
|
|
apply plugin: 'rebel'
|
|
apply plugin: 'license'
|
|
apply plugin: 'war'
|
|
apply plugin: 'org.springframework.boot'
|
|
apply plugin: 'eclipse'
|
|
apply plugin: 'idea'
|
|
apply plugin: 'tomcat'
|
|
apply plugin: 'project-report'
|
|
apply plugin: 'java'
|
|
apply plugin: 'openjpa'
|
|
// apply plugin: 'pmd'
|
|
// apply plugin: 'findbugs'
|
|
|
|
/* define the valid syntax level for source files */
|
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
|
/* define binary compatibility version */
|
|
targetCompatibility = JavaVersion.VERSION_1_8
|
|
|
|
project.ext.mysqlUser='root'
|
|
project.ext.mysqlPassword='mysql'
|
|
|
|
group = 'org.apache.fineract'
|
|
buildDir = new File(rootProject.projectDir, "../build")
|
|
repositories {
|
|
jcenter()
|
|
// mavenLocal() // useful for local dev using MariaDB4j SNAPSHOTs (not needed for real-world non-SNAPHOT builds)
|
|
}
|
|
|
|
openjpa {
|
|
includes = ['**/AbstractPersistableCustom.class', '**/domain/*.class']
|
|
enhance {
|
|
enforcePropertyRestrictions true
|
|
}
|
|
}
|
|
|
|
rat {
|
|
xmlOutput = false
|
|
htmlOutput = false
|
|
plainOutput = true
|
|
verbose = false
|
|
// inputDir = './..'
|
|
reportDir = new File(buildDir,'reports/rat')
|
|
excludes = [
|
|
'**/licenses/**',
|
|
'**/*.md',
|
|
'**/*.github/*',
|
|
'**/MANIFEST.MF',
|
|
'**/*.txt',
|
|
'**/*.log',
|
|
'**/fineractdev-eclipse-preferences.epf',
|
|
'**/template-expected.html',
|
|
'**/template.mustache',
|
|
'**/.classpath',
|
|
'**/.project',
|
|
'**/.idea/**',
|
|
'**/*.ipr',
|
|
'**/*.iws',
|
|
'**/.settings/**',
|
|
'**/bin/**',
|
|
'**/.git/**',
|
|
'**/.gitignore',
|
|
'**/.gitkeep',
|
|
'**/*.iml',
|
|
//Notice files
|
|
'**/NOTICE_RELEASE',
|
|
'**/NOTICE_SOURCE',
|
|
// Swagger License
|
|
'**/src/main/resources/swagger-ui/**',
|
|
// gradle
|
|
'**/.gradle/**',
|
|
'**/gradlew',
|
|
'**/gradlew.bat',
|
|
'**/gradle/wrapper/gradle-wrapper.properties',
|
|
'**/caches/**',
|
|
'**/daemon/**',
|
|
'**/native/**',
|
|
'**/wrapper/**',
|
|
'**/build/**',
|
|
|
|
//Api Docs
|
|
'**/api-docs/*.*',
|
|
'**/docs/system-architecture/.htaccess',
|
|
'**/docs/system-architecture/404.html',
|
|
'**/docs/system-architecture/index.html',
|
|
'**/docs/system-architecture/**/*.xml',
|
|
'**/bootstrap-3.0.0/assets/application.js',
|
|
'**/system-architecture/js/plugins.js',
|
|
'**/docs/interoperation/specification/json/*.json',
|
|
|
|
//Apache License
|
|
'**/bootstrap-3.0.0/assets/less.js',
|
|
'**/css/bootstrap-3.0.0/**/*.*',
|
|
|
|
//Public Domain See http://www.JSON.org/js.html
|
|
'**/bootstrap-3.0.0/assets/json2.js.htm',
|
|
|
|
// MIT License
|
|
'**/modernizr-2.6.2.min.js',
|
|
'**/css/normalize.css',
|
|
'**/assets/filesaver.js',
|
|
'**/css/fonts/glyphicons-halflings-regular.svg',
|
|
'**/assets/jszip.js',
|
|
'**/assets/jquery.js',
|
|
'**/api-docs/jquery-1.7.min.js',
|
|
'**/css/toc-0.1.2/**/*.*',
|
|
'**/docs/system-architecture/css/main.css',
|
|
'**/system-architecture/js/vendor/jquery-1.9.1.min.js',
|
|
'**/system-architecture/js/vendor/toc-0.1.2/jquery.toc.min.js',
|
|
'**/assets/respond.min.js',
|
|
'**/assets/html5shiv.js',
|
|
|
|
//BSD License
|
|
'**/assets/uglify.js',
|
|
//Ignore out folder
|
|
'**/out/**'
|
|
]
|
|
}
|
|
|
|
configurations {
|
|
providedRuntime // needed for Spring Boot executable WAR
|
|
providedCompile
|
|
compile() {
|
|
exclude module: 'hibernate-entitymanager'
|
|
exclude module: 'hibernate-validator'
|
|
exclude module: 'activation'
|
|
exclude module: 'bcmail-jdk14'
|
|
exclude module: 'bcprov-jdk14'
|
|
exclude module: 'bctsp-jdk14'
|
|
exclude module: 'bval-core'
|
|
exclude module: 'org.apache.bval.bundle'
|
|
exclude module: 'bval-jsr303'
|
|
exclude module: 'c3p0'
|
|
exclude module: 'stax-api'
|
|
exclude module: 'jaxb-api'
|
|
exclude module: 'jaxb-impl'
|
|
exclude module: 'jboss-logging'
|
|
exclude module: 'itext-rtf'
|
|
exclude module: 'classworlds'
|
|
exclude module: 'jcl-over-slf4j'
|
|
exclude module: 'jul-to-slf4j'
|
|
exclude module: 'serp'
|
|
}
|
|
runtime
|
|
all*.exclude group: 'commons-logging'
|
|
}
|
|
/* Pick up dependencies based on the environemnt, defaults to production */
|
|
if (project.hasProperty('env') && project.getProperty('env') == 'dev') {
|
|
apply from: 'dev-dependencies.gradle'
|
|
} else {
|
|
apply from: 'dependencies.gradle'
|
|
}
|
|
|
|
/* Enable Oauth2 authentication based on environment, default to HTTP basic auth */
|
|
if (project.hasProperty('security') && project.getProperty('security') == 'oauth') {
|
|
if(project.hasProperty('twofactor') && project.getProperty('twofactor') == 'enabled') {
|
|
copy {
|
|
from './properties/oauth/twofactor/'
|
|
into 'src/main/resources/'
|
|
include '*.properties'
|
|
}
|
|
} else {
|
|
copy {
|
|
from './properties/oauth/'
|
|
into 'src/main/resources/'
|
|
include '*.properties'
|
|
}
|
|
}
|
|
} else {
|
|
if(project.hasProperty('twofactor') && project.getProperty('twofactor') == 'enabled') {
|
|
copy {
|
|
from './properties/basicauth/twofactor/'
|
|
into 'src/main/resources/'
|
|
include '*.properties'
|
|
}
|
|
} else {
|
|
copy {
|
|
from './properties/basicauth/'
|
|
into 'src/main/resources/'
|
|
include '*.properties'
|
|
}
|
|
}
|
|
}
|
|
|
|
task dist(type:Zip){
|
|
baseName = 'fineractplatform'
|
|
version = qualifyVersionIfNecessary(releaseVersion)
|
|
includeEmptyDirs = true
|
|
from('../') {
|
|
fileMode = 0755
|
|
include '*.md'
|
|
}
|
|
from('src/main/dist') {
|
|
fileMode = 0755
|
|
include '*'
|
|
}
|
|
from('../apps') {
|
|
fileMode = 0755
|
|
include '**/*'
|
|
into('apps')
|
|
}
|
|
from('../api-docs/') {
|
|
fileMode = 0755
|
|
include '*'
|
|
into('api-docs')
|
|
}
|
|
from('../fineract-db/') {
|
|
fileMode = 0755
|
|
include '*.sql'
|
|
into('database')
|
|
}
|
|
from('src/main/resources/sql/migrations') {
|
|
fileMode = 0755
|
|
include '**/*'
|
|
into('database/migrations')
|
|
}
|
|
|
|
from war.outputs.files
|
|
into(baseName + '-' + version)
|
|
}
|
|
|
|
compileJava{
|
|
dependsOn rat
|
|
}
|
|
/*
|
|
pmd {
|
|
sourceSets = [sourceSets.main]
|
|
ignoreFailures = true
|
|
}
|
|
findbugs {
|
|
ignoreFailures = true
|
|
sourceSets = [sourceSets.main]
|
|
}
|
|
*/
|
|
|
|
war {
|
|
from('../licenses/binary/') { // notice the parens
|
|
into "WEB-INF/licenses/binary/" // no leading slash
|
|
}
|
|
from('../LICENSE_RELEASE') { // notice the parens
|
|
into "WEB-INF/" // no leading slash
|
|
}
|
|
from('../NOTICE_RELEASE') { // notice the parens
|
|
into "WEB-INF/" // no leading slash
|
|
}
|
|
rename ('LICENSE_RELEASE', 'LICENSE')
|
|
rename ('NOTICE_RELEASE', 'NOTICE')
|
|
|
|
from('../DISCLAIMER') { // notice the parens
|
|
into "WEB-INF/" // no leading slash
|
|
}
|
|
war.finalizedBy(bootWar)
|
|
}
|
|
|
|
license {
|
|
header rootProject.file('../APACHE_LICENSETEXT.md')
|
|
excludes(["**/*.html", "**/*.mustache", "**/package-info.java", "**/keystore.jks", "**/swagger-ui/**"])
|
|
strictCheck true
|
|
}
|
|
|
|
task licenseFormatBuildScripts (type:nl.javadude.gradle.plugins.license.License) {
|
|
source = fileTree(dir: '../', includes: ['**/*.bat', '**/*.sh', '**/*.sql'])
|
|
}
|
|
licenseFormat.dependsOn licenseFormatBuildScripts
|
|
|
|
tomcatRun {
|
|
httpPort = 8080
|
|
httpsPort = 8443
|
|
stopPort = 8081
|
|
stopKey= 'stopKey'
|
|
enableSSL = true
|
|
configFile = file('src/test/resources/META-INF/context.xml')
|
|
}
|
|
|
|
tomcatRunWar {
|
|
httpPort = 8080
|
|
httpsPort = 8443
|
|
stopPort = 8081
|
|
stopKey= 'stopKey'
|
|
enableSSL = true
|
|
keystoreFile = file('src/main/resources/keystore.jks')
|
|
keystorePass = 'openmf'
|
|
configFile = file('src/test/resources/META-INF/context.xml')
|
|
}
|
|
|
|
/* http://stackoverflow.com/questions/19653311/jpa-repository-works-in-idea-and-production-but-not-in-gradle */
|
|
sourceSets.main.output.resourcesDir = sourceSets.main.java.outputDir
|
|
sourceSets.test.output.resourcesDir = sourceSets.test.java.outputDir
|
|
|
|
/* Exclude maria db and embedded tomcat related files for non dev builds */
|
|
if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) {
|
|
sourceSets {
|
|
main {
|
|
java {
|
|
exclude '**/Server*'
|
|
exclude '**/MariaDB4j*'
|
|
exclude '**/EmbeddedTomcatWithSSLConfiguration.java'
|
|
}
|
|
}
|
|
test {
|
|
java {
|
|
exclude '**/core/boot/tests/**'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
sourceSets {
|
|
integrationTest {
|
|
compileClasspath += main.output + test.output
|
|
runtimeClasspath += main.output + test.output
|
|
}
|
|
}
|
|
|
|
configurations {
|
|
integrationTestCompile.extendsFrom testCompile
|
|
integrationTestRuntime.extendsFrom testRuntime
|
|
}
|
|
|
|
task integrationTest(type:Test){
|
|
description = "Run integration tests (located in src/integrationTest/java). Starts tomcat in daemon mode before executing the tests."
|
|
it.dependsOn war
|
|
doFirst {
|
|
tomcatRunWar.daemon = true
|
|
tomcatRunWar.execute()
|
|
}
|
|
testClassesDirs = project.sourceSets.integrationTest.output.classesDirs
|
|
classpath = project.sourceSets.integrationTest.runtimeClasspath
|
|
}
|
|
|
|
|
|
import groovy.sql.Sql
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
}
|
|
configurations {
|
|
driver
|
|
}
|
|
dependencies {
|
|
driver 'org.drizzle.jdbc:drizzle-jdbc:1.4'
|
|
}
|
|
|
|
URLClassLoader loader = GroovyObject.class.classLoader
|
|
configurations.driver.each {File file ->
|
|
loader.addURL(file.toURL())
|
|
}
|
|
|
|
task createDB {
|
|
description= "Creates the Database. Needs database name to be passed (like: -PdbName=someDBname)"
|
|
doLast {
|
|
def sql = Sql.newInstance( 'jdbc:mysql:thin://localhost:3306/', mysqlUser, mysqlPassword, 'org.drizzle.jdbc.DrizzleDriver' )
|
|
sql.execute( 'create database '+"`$dbName`" )
|
|
}
|
|
}
|
|
|
|
task dropDB {
|
|
description= "Drops the specified database. The database name has to be passed (like: -PdbName=someDBname)"
|
|
doLast {
|
|
def sql = Sql.newInstance( 'jdbc:mysql:thin://localhost:3306/', mysqlUser, mysqlPassword, 'org.drizzle.jdbc.DrizzleDriver' )
|
|
sql.execute( 'DROP DATABASE '+"`$dbName`")
|
|
}
|
|
}
|
|
task setBlankPassword {
|
|
doLast {
|
|
def sql = Sql.newInstance( 'jdbc:mysql:thin://localhost:3306/', mysqlUser, mysqlPassword, 'org.drizzle.jdbc.DrizzleDriver' )
|
|
sql.execute('USE `mifosplatform-tenants`')
|
|
sql.execute('UPDATE mifosplatform-tenants.tenants SET schema_server = \'localhost\', schema_server_port = \'3306\', schema_username = \'mifos\', schema_password = \'mysql\' WHERE id=1;')
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* Support publication of artifacts versioned by topic branch.
|
|
* CI builds supply `-P BRANCH_NAME=<TOPIC>` to gradle at build time.
|
|
* If <TOPIC> starts with 'MIFOSX-', change version
|
|
* from BUILD-SNAPSHOT => <TOPIC>-SNAPSHOT
|
|
* e.g. 1.1.0.BUILD-SNAPSHOT => 1.0.0.MIFOSX-1234-SNAPSHOT
|
|
*/
|
|
def qualifyVersionIfNecessary(version) {
|
|
|
|
if (rootProject.hasProperty("BRANCH_NAME")) {
|
|
def qualifier = rootProject.getProperty("BRANCH_NAME")
|
|
if (qualifier.startsWith("MIFOSX-")) {
|
|
return version.replace('BUILD', qualifier)
|
|
}
|
|
}
|
|
return version
|
|
}
|
|
|
|
springBoot {
|
|
mainClassName = 'org.apache.fineract.ServerWithMariaDB4jApplication'
|
|
}
|
|
bootWar {
|
|
mainClassName = 'org.apache.fineract.ServerWithMariaDB4jApplication'
|
|
}
|