| /** |
| * 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 = 'Fineract Provider' |
| |
| apply plugin: 'org.zeroturnaround.gradle.jrebel' |
| apply plugin: 'java' |
| apply plugin: 'eclipse' |
| apply plugin: 'org.springframework.boot' |
| apply plugin: 'com.gorylenko.gradle-git-properties' |
| apply plugin: 'io.swagger.core.v3.swagger-gradle-plugin' |
| apply plugin: 'com.google.cloud.tools.jib' |
| |
| |
| compileJava.doLast { |
| def mainSS = sourceSets.main |
| def source = mainSS.java.classesDirectory.get() |
| copy { |
| from file("src/main/resources/jpa/persistence.xml") |
| into "${source}/META-INF/" |
| } |
| javaexec { |
| description = 'Performs EclipseLink static weaving of entity classes' |
| def target = source |
| main 'org.eclipse.persistence.tools.weaving.jpa.StaticWeave' |
| args '-persistenceinfo', source, '-classpath', configurations.runtimeClasspath, source, target |
| classpath configurations.runtimeClasspath |
| } |
| delete { |
| delete "${source}/META-INF/persistence.xml" |
| } |
| } |
| |
| // Configuration for Swagger documentation generation task |
| // https://github.com/swagger-api/swagger-core/tree/master/modules/swagger-gradle-plugin |
| import org.apache.tools.ant.filters.ReplaceTokens |
| |
| task prepareInputYaml { |
| outputs.file("${buildDir}/tmp/swagger/fineract-input.yaml") |
| |
| doLast { |
| copy { |
| from file("${projectDir}/config/swagger/fineract-input.yaml.template") |
| into file("${buildDir}/tmp/swagger") |
| rename { String filename -> return 'fineract-input.yaml' } |
| filter(ReplaceTokens, tokens: [VERSION: "${project.version}".toString()]) |
| } |
| } |
| } |
| |
| resolve { |
| logging.captureStandardOutput LogLevel.QUIET |
| outputFileName = 'fineract' |
| outputFormat = 'JSONANDYAML' |
| prettyPrint = false |
| classpath = sourceSets.main.runtimeClasspath |
| outputDir = file("${buildDir}/classes/java/main/static") |
| openApiFile = file("${buildDir}/tmp/swagger/fineract-input.yaml") |
| sortOutput = true |
| dependsOn(prepareInputYaml) |
| } |
| |
| 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: 'c3p0' |
| exclude module: 'stax-api' |
| exclude module: 'jaxb-api' |
| exclude module: 'jaxb-impl' |
| exclude module: 'jboss-logging' |
| exclude module: 'itext-rtf' |
| exclude module: 'classworlds' |
| } |
| runtime |
| } |
| |
| apply from: 'dependencies.gradle' |
| |
| // Configuration for the modernizer plugin |
| // https://github.com/andygoossens/gradle-modernizer-plugin |
| modernizer { |
| ignoreClassNamePatterns = [ |
| '.*AbstractPersistableCustom', |
| '.*EntityTables', |
| '.*domain.*' |
| ] |
| } |
| |
| // If we are running Gradle within Eclipse to enhance classes with OpenJPA, |
| // set the classes directory to point to Eclipse's default build directory |
| if (project.hasProperty('env') && project.getProperty('env') == 'eclipse') |
| { |
| sourceSets.main.java.outputDir = new File(rootProject.projectDir, "fineract-provider/bin/main") |
| } |
| |
| eclipse |
| { |
| project { |
| buildCommand([ LaunchConfigHandle: "<project>/.externalToolBuilders/OpenJPA Enhance Builder.launch" ], 'org.eclipse.ui.externaltools.ExternalToolBuilder') |
| } |
| } |
| |
| /* 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 |
| |
| if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { |
| sourceSets { |
| test { |
| java { |
| exclude '**/core/boot/tests/**' |
| } |
| } |
| } |
| } |
| |
| // Configuration for SQL tasks |
| // https://docs.groovy-lang.org/latest/html/api/groovy/sql/Sql.html |
| import groovy.sql.Sql |
| |
| project.ext.mysqlUser='root' |
| project.ext.mysqlPassword='mysql' |
| project.ext.pgUser='root' |
| project.ext.pgPassword='postgres' |
| |
| configurations { |
| driver |
| } |
| dependencies { |
| driver 'org.mariadb.jdbc:mariadb-java-client:2.7.5' |
| driver 'org.postgresql:postgresql:42.3.5' |
| driver 'mysql:mysql-connector-java:8.0.29' |
| } |
| |
| URLClassLoader loader = GroovyObject.class.classLoader |
| configurations.driver.each {File file -> |
| loader.addURL(file.toURL()) |
| } |
| |
| task createDB { |
| description= "Creates the MariaDB Database. Needs database name to be passed (like: -PdbName=someDBname)" |
| doLast { |
| def sql = Sql.newInstance( 'jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver' ) |
| sql.execute( 'create database '+"`$dbName`" ) |
| } |
| } |
| |
| task dropDB { |
| description= "Drops the specified MariaDB database. The database name has to be passed (like: -PdbName=someDBname)" |
| doLast { |
| def sql = Sql.newInstance( 'jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver' ) |
| sql.execute( 'DROP DATABASE '+"`$dbName`") |
| } |
| } |
| |
| task createPGDB { |
| description= "Creates the PostgreSQL Database. Needs database name to be passed (like: -PdbName=someDBname)" |
| doLast { |
| def sql = Sql.newInstance( 'jdbc:postgresql://localhost:5432/', pgUser, pgPassword, 'org.postgresql.Driver' ) |
| sql.execute( 'create database '+"$dbName" ) |
| } |
| } |
| |
| task dropPGDB { |
| description= "Drops the specified PostgreSQL database. The database name has to be passed (like: -PdbName=someDBname)" |
| doLast { |
| def sql = Sql.newInstance( 'jdbc:postgresql://localhost:5432/', pgUser, pgPassword, 'org.postgresql.Driver' ) |
| sql.execute( 'DROP DATABASE '+ "$dbName") |
| } |
| } |
| |
| task createMySQLDB { |
| description= "Creates the MySQL Database. Needs database name to be passed (like: -PdbName=someDBname)" |
| doLast { |
| def sql = Sql.newInstance( 'jdbc:mysql://localhost:3306/', mysqlUser, mysqlPassword, 'com.mysql.cj.jdbc.Driver' ) |
| sql.execute( 'create database '+"`$dbName`" ) |
| } |
| } |
| |
| task dropMySQLDB { |
| description= "Drops the specified MySQL database. The database name has to be passed (like: -PdbName=someDBname)" |
| doLast { |
| def sql = Sql.newInstance( 'jdbc:mysql://localhost:3306/', mysqlUser, mysqlPassword, 'com.mysql.cj.jdbc.Driver' ) |
| sql.execute( 'DROP DATABASE '+"`$dbName`") |
| } |
| } |
| |
| task setBlankPassword { |
| doLast { |
| def sql = Sql.newInstance( 'jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver' ) |
| sql.execute('USE `fineract_tenants`') |
| sql.execute('UPDATE fineract_tenants.tenants SET schema_server = \'localhost\', schema_server_port = \'3306\', schema_username = \'mifos\', schema_password = \'mysql\' WHERE id=1;') |
| } |
| } |
| |
| bootRun { |
| jvmArgs = [ |
| "-Dspring.output.ansi.enabled=ALWAYS" |
| ] |
| |
| dependencies { |
| implementation 'org.mariadb.jdbc:mariadb-java-client:2.7.5' |
| implementation 'org.postgresql:postgresql:42.3.5' |
| } |
| } |
| |
| springBoot { |
| mainClass = 'org.apache.fineract.ServerApplication' |
| } |
| |
| bootJar { |
| duplicatesStrategy = DuplicatesStrategy.EXCLUDE |
| manifest { |
| attributes('Main-Class': 'org.springframework.boot.loader.PropertiesLauncher', 'Implementation-Title': 'Apache Fineract', 'Implementation-Version': project.version) |
| } |
| classifier = '' |
| dependsOn resolve |
| } |
| |
| jib { |
| from { |
| image = 'azul/zulu-openjdk-alpine:17' |
| } |
| |
| to { |
| image = 'fineract' |
| tags = [ |
| "${project.version}", |
| 'latest' |
| ] |
| } |
| |
| container { |
| creationTime = 'USE_CURRENT_TIMESTAMP' |
| mainClass = 'org.apache.fineract.ServerApplication' |
| jvmFlags = [ |
| '-Xmx1G', |
| '-Xms1G', |
| '-XshowSettings:vm', |
| '-XX:+UseContainerSupport', |
| '-XX:+UseStringDeduplication', |
| '-XX:MinRAMPercentage=25', |
| '-XX:MaxRAMPercentage=80', |
| '--add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED', |
| '--add-opens=java.base/java.lang=ALL-UNNAMED', |
| '--add-opens=java.base/java.lang.invoke=ALL-UNNAMED', |
| '--add-opens=java.base/java.io=ALL-UNNAMED', |
| '--add-opens=java.base/java.security=ALL-UNNAMED', |
| '--add-opens=java.base/java.util=ALL-UNNAMED', |
| '--add-opens=java.management/javax.management=ALL-UNNAMED', |
| '--add-opens=java.naming/javax.naming=ALL-UNNAMED' |
| ] |
| args = [ |
| '-Duser.home=/tmp', |
| '-Dfile.encoding=UTF-8', |
| '-Duser.timezone=UTC', |
| '-Djava.security.egd=file:/dev/./urandom' |
| ] |
| ports = ['8080/tcp', '8443/tcp'] |
| labels = [maintainer: 'Aleksandar Vidakovic <aleks@apache.org>'] |
| user = 'nobody:nogroup' |
| } |
| |
| allowInsecureRegistries = true |
| |
| dependencies { |
| implementation 'org.mariadb.jdbc:mariadb-java-client:2.7.5' |
| implementation 'org.postgresql:postgresql:42.3.5' |
| } |
| |
| pluginExtensions { |
| pluginExtension { |
| implementation = 'com.google.cloud.tools.jib.gradle.extension.layerfilter.JibLayerFilterExtension' |
| configuration { |
| filters { |
| filter { |
| glob = '/app/resources/**' |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| task migrateDatabase { |
| doFirst { |
| println "Executing liquibase database migration to version $dbVersion" |
| |
| def dbUrl = "jdbc:$dbType://$dbHost$dbPort/$dbName" |
| def changeLogFilePath = "fineract-provider/src/main/resources/db/changelog/tenant/upgrades/0000_upgrade_to_$dbVersion.xml" |
| |
| liquibase { |
| activities { |
| main { |
| changeLogFile changeLogFilePath |
| url dbUrl |
| username project.ext.mysqlUser |
| password project.ext.mysqlPassword |
| } |
| } |
| } |
| } |
| } |
| |
| tasks.jibDockerBuild.dependsOn(bootJar) |
| |
| // Configuration for git properties gradle plugin |
| // https://github.com/n0mer/gradle-git-properties |
| gitProperties { |
| gitPropertiesResourceDir = file("$buildDir/classes/java/main") |
| dateFormat = "yyyy-MM-dd'T'HH:mmZ" |
| dateFormatTimeZone = "GMT" |
| failOnNoGitDirectory = false |
| } |
| |
| // make sure the generateGitProperties task always executes (even when git.properties is not changed) |
| generateGitProperties.outputs.upToDateWhen { false } |
| |
| // NOTE: Gradle suggested these dependencies |
| jar.dependsOn resolve |
| test.dependsOn resolve |
| checkstyleMain.dependsOn resolve |
| checkstyleTest.dependsOn resolve |
| rat.dependsOn prepareInputYaml |
| spotbugsTest.dependsOn resolve |
| compileTestJava.dependsOn ':fineract-client:processResources' |
| bootJarMainClassName.dependsOn resolve |