| /** |
| * 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 |
| ''' |
| buildscript { |
| 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:1.1.6.RELEASE' // also change springDataJpaVersion below |
| classpath 'org.apache.openjpa:openjpa-all:2.4.1' |
| classpath 'at.schmutterer.oss.gradle:gradle-openjpa:0.2.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: 'spring-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.springBootVersion = '1.1.6.RELEASE' |
| project.ext.springVersion = '4.0.7.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 above |
| |
| 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 { |
| files = fileTree(sourceSets.main.output.classesDir).matching { |
| include '**/AbstractPersistableCustom.class' |
| include '**/domain/*.class' |
| |
| } |
| enforcePropertyRestrictions = true |
| } |
| |
| rat { |
| xmlOutput = false |
| htmlOutput = false |
| plainOutput = true |
| verbose = false |
| // inputDir = './..' |
| reportDir = new File(buildDir,'reports/rat') |
| excludes = [ |
| '**/licenses/**', |
| '**/*.md', |
| '**/MANIFEST.MF', |
| '**/*.txt', |
| '**/*.log', |
| '**/fineractdev-eclipse-preferences.epf', |
| '**/template-expected.html', |
| '**/template.mustache', |
| '**/.classpath', |
| '**/.project', |
| '**/.idea/**', |
| '**/.settings/**', |
| '**/bin/**', |
| '**/.git/**', |
| '**/.gitignore', |
| '**/.gitkeep', |
| '**/*.iml', |
| //Notice files |
| '**/NOTICE_RELEASE', |
| '**/NOTICE_SOURCE', |
| // 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', |
| |
| //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' |
| ] |
| } |
| |
| 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') { |
| copy { |
| from './properties/oauth/' |
| 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(bootRepackage) |
| } |
| |
| license { |
| header rootProject.file('../APACHE_LICENSETEXT.md') |
| excludes(["**/*.html", "**/*.mustache", "**/package-info.java", "**/keystore.jks"]) |
| 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.output.classesDir |
| sourceSets.test.output.resourcesDir = sourceSets.test.output.classesDir |
| |
| /* 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() |
| } |
| testClassesDir = project.sourceSets.integrationTest.output.classesDir |
| classpath = project.sourceSets.integrationTest.runtimeClasspath |
| } |
| |
| |
| import groovy.sql.Sql |
| |
| repositories { |
| mavenCentral() |
| } |
| configurations { |
| driver |
| } |
| dependencies { |
| driver 'org.drizzle.jdbc:drizzle-jdbc:1.3' |
| } |
| |
| test { |
| filter { |
| //includeTestsMatching "org.apache.fineract.infrastructure.configuration.spring.SpringConfigurationTest.*" |
| includeTestsMatching "org.apache.fineract.template.TemplateMergeServiceTest.*" |
| } |
| } |
| |
| 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)" |
| 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)" |
| sql = Sql.newInstance( 'jdbc:mysql:thin://localhost:3306/', mysqlUser, mysqlPassword, 'org.drizzle.jdbc.DrizzleDriver' ) |
| sql.execute( 'DROP DATABASE '+"`$dbName`") |
| } |
| task setBlankPassword<<{ |
| 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;') |
| } |
| |
| |
| apply plugin: 'flyway' |
| buildscript { |
| repositories { |
| mavenCentral() |
| } |
| |
| dependencies { |
| classpath "org.flywaydb:flyway-gradle-plugin:3.0" // version upgraded during Spring Boot & MariaDB4j work, as prev. used v0.2 didn't work well after *.sql moved from fineract-db to fineract-provider/src/main/resources (new version also has clearer errors, e.g. in case of missing DB) |
| classpath 'org.drizzle.jdbc:drizzle-jdbc:1.3' |
| } |
| } |
| |
| |
| flyway { |
| url = "jdbc:mysql:thin://localhost:3306/mifostenant-default" |
| driver = "org.drizzle.jdbc.DrizzleDriver" |
| user = mysqlUser |
| password = mysqlPassword |
| } |
| |
| task migrateTenantDB<<{ |
| description="Migrates a Tenant DB. Optionally can pass dbName. Defaults to 'mifostenant-default' (Example: -PdbName=someTenantDBname)" |
| |
| def filePath = "filesystem:$projectDir" + '/src/main/resources/sql/migrations/core_db' |
| def tenantDbName = 'mifostenant-default'; |
| if (rootProject.hasProperty("dbName")) { |
| tenantDbName = rootProject.getProperty("dbName") |
| } |
| |
| flyway.url= "jdbc:mysql:thin://localhost:3306/$tenantDbName" |
| flyway.driver = "org.drizzle.jdbc.DrizzleDriver" |
| flyway.locations= [filePath] |
| /**We use ${ as the prefix for strecthy reporting, do not want them to be interpreted by Flyway**/ |
| flyway.placeholderPrefix = "\$\${" |
| flywayMigrate.execute() |
| } |
| |
| task showTenantDBInfo<<{ |
| description="Shows the migration info for a Tenant DB. Optionally can pass dbName. Defaults to 'mifostenant-default' (Example: -PdbName=someTenantDBname)" |
| |
| def filePath = "filesystem:$projectDir" + '/src/main/resources/sql/migrations/core_db' |
| def tenantDbName = 'mifostenant-default'; |
| if (rootProject.hasProperty("dbName")) { |
| tenantDbName = rootProject.getProperty("dbName") |
| } |
| |
| flyway.url= "jdbc:mysql:thin://localhost:3306/$tenantDbName" |
| flyway.driver = "org.drizzle.jdbc.DrizzleDriver" |
| flyway.locations= [filePath] |
| flywayInfo.execute() |
| } |
| |
| |
| task migrateTenantListDB<<{ |
| description="Migrates a Tenant List DB. Optionally can pass dbName. Defaults to 'mifosplatform-tenants' (Example: -PdbName=someDBname)" |
| |
| def filePath = "filesystem:$projectDir" + '/src/main/resources/sql/migrations/list_db' |
| def tenantsDbName = 'mifosplatform-tenants'; |
| if (rootProject.hasProperty("dbName")) { |
| tenantsDbName = rootProject.getProperty("dbName") |
| } |
| |
| flyway.url= "jdbc:mysql:thin://localhost:3306/$tenantsDbName" |
| flyway.driver = "org.drizzle.jdbc.DrizzleDriver" |
| flyway.locations= [filePath] |
| |
| flywayMigrate.execute() |
| } |
| |
| task showTenantListDBInfo<<{ |
| description="Shows the migration info for a List DB. Optionally can pass dbName. Defaults to 'mifosplatform-tenants' (Example: -PdbName=someDBname)" |
| |
| def filePath = "filesystem:$projectDir" + '/src/main/resources/sql/migrations/list_db' |
| def tenantsDbName = 'mifosplatform-tenants'; |
| if (rootProject.hasProperty("dbName")) { |
| tenantsDbName = rootProject.getProperty("dbName") |
| } |
| |
| flyway.url= "jdbc:mysql:thin://localhost:3306/$tenantsDbName" |
| flyway.driver = "org.drizzle.jdbc.DrizzleDriver" |
| flyway.locations= [filePath] |
| flywayInfo.execute() |
| } |
| |
| task repairTenantDB<<{ |
| description="repair migrate" |
| |
| def filePath = "filesystem:$projectDir" + '/src/main/resources/sql/migrations/list_db' |
| def tenantsDbName = 'mifosplatform-tenants'; |
| if (rootProject.hasProperty("dbName")) { |
| tenantsDbName = rootProject.getProperty("dbName") |
| } |
| |
| flyway.url= "jdbc:mysql:thin://localhost:3306/$tenantsDbName" |
| flyway.driver = "org.drizzle.jdbc.DrizzleDriver" |
| flyway.locations= [filePath] |
| flywayRepair.execute() |
| } |
| |
| /* |
| * 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 { |
| mainClass = 'org.apache.fineract.ServerWithMariaDB4jApplication' |
| } |
| bootRepackage { |
| mainClass = 'org.apache.fineract.ServerWithMariaDB4jApplication' |
| } |