diff --git a/build.gradle b/build.gradle index 5b6371319..d0e066515 100644 --- a/build.gradle +++ b/build.gradle @@ -365,10 +365,6 @@ configure(project.fineractJavaProjects) { withJavadocJar() } - tasks.withType(ProcessResources).configureEach { - destinationDir = layout.buildDirectory.dir('classes/java/main').get().asFile - } - // Add performance optimizations configurations.configureEach { resolutionStrategy { diff --git a/custom/docker/build.gradle b/custom/docker/build.gradle index 2822fe537..66c91b399 100644 --- a/custom/docker/build.gradle +++ b/custom/docker/build.gradle @@ -58,7 +58,6 @@ jib { allowInsecureRegistries = true dependencies { - implementation project(':fineract-core') implementation project(':fineract-provider') // NOTE: dynamically load all custom modules file("${rootDir}/custom").eachDir { companyDir -> diff --git a/fineract-accounting/build.gradle b/fineract-accounting/build.gradle index ceb6895f8..eb91427a7 100644 --- a/fineract-accounting/build.gradle +++ b/fineract-accounting/build.gradle @@ -22,32 +22,48 @@ apply plugin: 'java' apply plugin: 'eclipse' tasks.register('staticWeaveJpa', JavaExec) { - group = "build" - description = "Performs EclipseLink static weaving of entity classes" - dependsOn classes - def classesDir = file("$buildDir/classes/java/main") + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() + copy { + from file("src/main/resources/jpa/static-weaving/module/accounting/persistence.xml") + into "${persistenceInfo}/META-INF/" + } - mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave') + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") classpath = sourceSets.main.runtimeClasspath - args '-persistenceinfo', classesDir.absolutePath, classesDir.absolutePath, classesDir.absolutePath + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] } -staticWeaveJpa.doLast { - delete "${sourceSets.main.output.classesDirs.asPath}/META-INF/persistence.xml" +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") } -tasks.named('classes') { - finalizedBy staticWeaveJpa +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar } + + compileJava { dependsOn ':fineract-avro-schemas:buildJavaSdk' } @@ -106,3 +122,18 @@ if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { } } } + +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) +} diff --git a/fineract-accounting/src/main/resources/META-INF/persistence.xml b/fineract-accounting/src/main/resources/META-INF/persistence.xml deleted file mode 100644 index 3e2aa1743..000000000 --- a/fineract-accounting/src/main/resources/META-INF/persistence.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - org.eclipse.persistence.jpa.PersistenceProvider - - org.apache.fineract.accounting.glaccount.domain.GLAccount - org.apache.fineract.infrastructure.codes.domain.Code - org.apache.fineract.infrastructure.codes.domain.CodeValue - org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom - org.apache.fineract.organisation.office.domain.Office - org.apache.fineract.portfolio.paymenttype.domain.PaymentType - org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail - org.apache.fineract.portfolio.tax.domain.TaxComponent - org.apache.fineract.portfolio.tax.domain.TaxComponentHistory - org.apache.fineract.portfolio.tax.domain.TaxGroup - org.apache.fineract.portfolio.tax.domain.TaxGroupMappings - - org.apache.fineract.portfolio.charge.domain.Charge - false - - - - - diff --git a/fineract-loan/src/main/resources/META-INF/persistence.xml b/fineract-accounting/src/main/resources/jpa/static-weaving/module/accounting/persistence.xml similarity index 74% rename from fineract-loan/src/main/resources/META-INF/persistence.xml rename to fineract-accounting/src/main/resources/jpa/static-weaving/module/accounting/persistence.xml index bb2388765..60e55ff84 100644 --- a/fineract-loan/src/main/resources/META-INF/persistence.xml +++ b/fineract-accounting/src/main/resources/jpa/static-weaving/module/accounting/persistence.xml @@ -22,56 +22,69 @@ + xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> org.eclipse.persistence.jpa.PersistenceProvider - - org.apache.fineract.accounting.glaccount.domain.GLAccount - org.apache.fineract.accounting.journalentry.domain.JournalEntry - org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom - org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom - org.apache.fineract.infrastructure.codes.domain.Code - org.apache.fineract.infrastructure.codes.domain.CodeValue - org.apache.fineract.infrastructure.documentmanagement.domain.Image - org.apache.fineract.organisation.staff.domain.Staff - org.apache.fineract.organisation.office.domain.Office - org.apache.fineract.organisation.monetary.domain.OrganisationCurrency - org.apache.fineract.organisation.monetary.domain.ApplicationCurrency - org.apache.fineract.organisation.holiday.domain.Holiday - org.apache.fineract.organisation.workingdays.domain.WorkingDays - org.apache.fineract.portfolio.group.domain.Group - org.apache.fineract.portfolio.group.domain.GroupLevel - org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory - org.apache.fineract.portfolio.group.domain.GroupRole - org.apache.fineract.portfolio.client.domain.Client - org.apache.fineract.portfolio.client.domain.ClientIdentifier - org.apache.fineract.portfolio.rate.domain.Rate - org.apache.fineract.portfolio.fund.domain.Fund - org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket - org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange - org.apache.fineract.portfolio.paymenttype.domain.PaymentType - org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail - org.apache.fineract.portfolio.floatingrates.domain.FloatingRate - org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod - org.apache.fineract.portfolio.calendar.domain.Calendar - org.apache.fineract.portfolio.calendar.domain.CalendarHistory - org.apache.fineract.portfolio.calendar.domain.CalendarInstance - org.apache.fineract.useradministration.domain.AppUser + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.workingdays.domain.WorkingDays org.apache.fineract.useradministration.domain.Permission org.apache.fineract.useradministration.domain.AppUserClientMapping - + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.client.domain.ClientIdentifier + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + + + org.apache.fineract.accounting.closure.domain.GLClosure + org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount + org.apache.fineract.accounting.glaccount.domain.TrialBalance + org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping + org.apache.fineract.accounting.rule.domain.AccountingRule + org.apache.fineract.accounting.rule.domain.AccountingTagRule + org.apache.fineract.accounting.journalentry.domain.JournalEntry + + org.apache.fineract.portfolio.charge.domain.Charge - - org.apache.fineract.portfolio.tax.domain.TaxGroup - org.apache.fineract.portfolio.tax.domain.TaxGroupMappings + + org.apache.fineract.portfolio.tax.domain.TaxComponent org.apache.fineract.portfolio.tax.domain.TaxComponentHistory - org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter + org.apache.fineract.portfolio.tax.domain.TaxGroup + org.apache.fineract.portfolio.tax.domain.TaxGroupMappings + false diff --git a/fineract-avro-schemas/build.gradle b/fineract-avro-schemas/build.gradle index e94a01d94..49c061163 100644 --- a/fineract-avro-schemas/build.gradle +++ b/fineract-avro-schemas/build.gradle @@ -132,8 +132,4 @@ tasks.named('sourcesJar') { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } -} + diff --git a/fineract-branch/build.gradle b/fineract-branch/build.gradle index 505273c14..b3c2c6ff3 100644 --- a/fineract-branch/build.gradle +++ b/fineract-branch/build.gradle @@ -22,32 +22,50 @@ apply plugin: 'java' apply plugin: 'eclipse' tasks.register('staticWeaveJpa', JavaExec) { - group = "build" - description = "Performs EclipseLink static weaving of entity classes" - dependsOn classes - def classesDir = file("$buildDir/classes/java/main") + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() + copy { + from file("src/main/resources/jpa/static-weaving/module/branch/persistence.xml") + into "${persistenceInfo}/META-INF/" + } - mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave') + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") classpath = sourceSets.main.runtimeClasspath - args '-persistenceinfo', classesDir.absolutePath, classesDir.absolutePath, classesDir.absolutePath + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] } -staticWeaveJpa.doLast { - delete "${sourceSets.main.output.classesDirs.asPath}/META-INF/persistence.xml" + + +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") } -tasks.named('classes') { - finalizedBy staticWeaveJpa +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar } + + compileJava { dependsOn ':fineract-avro-schemas:buildJavaSdk' } @@ -112,3 +130,18 @@ if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { } } } + +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) +} diff --git a/fineract-branch/src/main/resources/jpa/static-weaving/module/branch/persistence.xml b/fineract-branch/src/main/resources/jpa/static-weaving/module/branch/persistence.xml new file mode 100644 index 000000000..5e972e532 --- /dev/null +++ b/fineract-branch/src/main/resources/jpa/static-weaving/module/branch/persistence.xml @@ -0,0 +1,100 @@ + + + + + + + + + + org.eclipse.persistence.jpa.PersistenceProvider + + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.workingdays.domain.WorkingDays + org.apache.fineract.useradministration.domain.Permission + org.apache.fineract.useradministration.domain.AppUserClientMapping + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.client.domain.ClientIdentifier + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + + + org.apache.fineract.accounting.closure.domain.GLClosure + org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount + org.apache.fineract.accounting.glaccount.domain.TrialBalance + org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping + org.apache.fineract.accounting.rule.domain.AccountingRule + org.apache.fineract.accounting.rule.domain.AccountingTagRule + org.apache.fineract.accounting.journalentry.domain.JournalEntry + + + org.apache.fineract.portfolio.charge.domain.Charge + + + org.apache.fineract.organisation.teller.domain.CashierTransaction + org.apache.fineract.organisation.teller.domain.Teller + org.apache.fineract.organisation.teller.domain.Cashier + org.apache.fineract.organisation.teller.domain.TellerTransaction + + + org.apache.fineract.portfolio.tax.domain.TaxComponent + org.apache.fineract.portfolio.tax.domain.TaxComponentHistory + org.apache.fineract.portfolio.tax.domain.TaxGroup + org.apache.fineract.portfolio.tax.domain.TaxGroupMappings + + + false + + + + + diff --git a/fineract-charge/build.gradle b/fineract-charge/build.gradle index 58b90df78..5128875f8 100644 --- a/fineract-charge/build.gradle +++ b/fineract-charge/build.gradle @@ -22,32 +22,50 @@ apply plugin: 'java' apply plugin: 'eclipse' tasks.register('staticWeaveJpa', JavaExec) { - group = "build" - description = "Performs EclipseLink static weaving of entity classes" - dependsOn classes - def classesDir = file("$buildDir/classes/java/main") + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() + copy { + from file("src/main/resources/jpa/static-weaving/module/charge/persistence.xml") + into "${persistenceInfo}/META-INF/" + } - mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave') + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") classpath = sourceSets.main.runtimeClasspath - args '-persistenceinfo', classesDir.absolutePath, classesDir.absolutePath, classesDir.absolutePath + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] } -staticWeaveJpa.doLast { - delete "${sourceSets.main.output.classesDirs.asPath}/META-INF/persistence.xml" + + +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") } -tasks.named('classes') { - finalizedBy staticWeaveJpa +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar } + + compileJava { dependsOn ':fineract-avro-schemas:buildJavaSdk' } @@ -112,3 +130,18 @@ if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { } } } + +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) +} diff --git a/fineract-rates/src/main/resources/META-INF/persistence.xml b/fineract-charge/src/main/resources/jpa/static-weaving/module/charge/persistence.xml similarity index 72% rename from fineract-rates/src/main/resources/META-INF/persistence.xml rename to fineract-charge/src/main/resources/jpa/static-weaving/module/charge/persistence.xml index b76d09e1a..695790147 100644 --- a/fineract-rates/src/main/resources/META-INF/persistence.xml +++ b/fineract-charge/src/main/resources/jpa/static-weaving/module/charge/persistence.xml @@ -22,54 +22,69 @@ + xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> org.eclipse.persistence.jpa.PersistenceProvider - - org.apache.fineract.accounting.glaccount.domain.GLAccount - org.apache.fineract.accounting.journalentry.domain.JournalEntry - org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom - org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom - org.apache.fineract.infrastructure.codes.domain.Code - org.apache.fineract.infrastructure.codes.domain.CodeValue - org.apache.fineract.infrastructure.documentmanagement.domain.Image - org.apache.fineract.organisation.staff.domain.Staff - org.apache.fineract.organisation.office.domain.Office - org.apache.fineract.organisation.office.domain.OrganisationCurrency - org.apache.fineract.organisation.monetary.domain.ApplicationCurrency - org.apache.fineract.organisation.holiday.domain.Holiday - org.apache.fineract.organisation.workingdays.domain.WorkingDays - org.apache.fineract.portfolio.group.domain.Group - org.apache.fineract.portfolio.group.domain.GroupLevel - org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory - org.apache.fineract.portfolio.group.domain.GroupRole - org.apache.fineract.portfolio.client.domain.Client - org.apache.fineract.portfolio.client.domain.ClientIdentifier - org.apache.fineract.portfolio.rate.domain.Rate - org.apache.fineract.portfolio.fund.domain.Fund - org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket - org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange - org.apache.fineract.portfolio.paymenttype.domain.PaymentType - org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail - org.apache.fineract.portfolio.tax.domain.TaxGroup - org.apache.fineract.portfolio.tax.domain.TaxGroupMappings - org.apache.fineract.portfolio.tax.domain.TaxComponent - org.apache.fineract.portfolio.tax.domain.TaxComponentHistory - org.apache.fineract.portfolio.floatingrates.domain.FloatingRate - org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod - org.apache.fineract.portfolio.calendar.domain.Calendar - org.apache.fineract.portfolio.calendar.domain.CalendarHistory - org.apache.fineract.portfolio.calendar.domain.CalendarInstance - org.apache.fineract.useradministration.domain.AppUser + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.workingdays.domain.WorkingDays org.apache.fineract.useradministration.domain.Permission org.apache.fineract.useradministration.domain.AppUserClientMapping - + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.client.domain.ClientIdentifier + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + + + org.apache.fineract.accounting.closure.domain.GLClosure + org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount + org.apache.fineract.accounting.glaccount.domain.TrialBalance + org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping + org.apache.fineract.accounting.rule.domain.AccountingRule + org.apache.fineract.accounting.rule.domain.AccountingTagRule + org.apache.fineract.accounting.journalentry.domain.JournalEntry + + + org.apache.fineract.portfolio.tax.domain.TaxComponent + org.apache.fineract.portfolio.tax.domain.TaxComponentHistory + org.apache.fineract.portfolio.tax.domain.TaxGroup + org.apache.fineract.portfolio.tax.domain.TaxGroupMappings + + org.apache.fineract.portfolio.charge.domain.Charge + false diff --git a/fineract-command/build.gradle b/fineract-command/build.gradle index 023b5b635..d585dce85 100644 --- a/fineract-command/build.gradle +++ b/fineract-command/build.gradle @@ -80,3 +80,59 @@ jmh { timeOnIteration = '2s' // Time per iteration benchmarkMode = ['thrpt'] // Default benchmark mode } + +tasks.register('staticWeaveJpa', JavaExec) { + dependsOn classes + + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() + copy { + from file("src/main/resources/jpa/static-weaving/module/command/persistence.xml") + into "${persistenceInfo}/META-INF/" + } + + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") + classpath = sourceSets.main.runtimeClasspath + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] +} + +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") +} + +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact +} + +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar +} + +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) +} diff --git a/fineract-command/dependencies.gradle b/fineract-command/dependencies.gradle index 8186f1181..2a1355cb1 100644 --- a/fineract-command/dependencies.gradle +++ b/fineract-command/dependencies.gradle @@ -41,6 +41,9 @@ dependencies { 'com.ibm.icu:icu4j', 'org.yakworks:spring-icu4j', ) + implementation('org.eclipse.persistence:org.eclipse.persistence.jpa') { + exclude group: 'org.eclipse.persistence', module: 'jakarta.persistence' + } compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' diff --git a/fineract-command/src/main/java/org/apache/fineract/command/persistence/CommandRepository.java b/fineract-command/src/main/java/org/apache/fineract/command/persistence/CommandRepository.java index 98e4b3bd0..3b261553f 100644 --- a/fineract-command/src/main/java/org/apache/fineract/command/persistence/CommandRepository.java +++ b/fineract-command/src/main/java/org/apache/fineract/command/persistence/CommandRepository.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.command.persistence; -import org.apache.fineract.command.persistence.model.CommandEntity; +import org.apache.fineract.command.persistence.domain.CommandEntity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; diff --git a/fineract-command/src/main/java/org/apache/fineract/command/persistence/model/CommandEntity.java b/fineract-command/src/main/java/org/apache/fineract/command/persistence/domain/CommandEntity.java similarity index 97% rename from fineract-command/src/main/java/org/apache/fineract/command/persistence/model/CommandEntity.java rename to fineract-command/src/main/java/org/apache/fineract/command/persistence/domain/CommandEntity.java index 06b78eec7..e7d5e4e86 100644 --- a/fineract-command/src/main/java/org/apache/fineract/command/persistence/model/CommandEntity.java +++ b/fineract-command/src/main/java/org/apache/fineract/command/persistence/domain/CommandEntity.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.fineract.command.persistence.model; +package org.apache.fineract.command.persistence.domain; import com.fasterxml.jackson.databind.JsonNode; import jakarta.persistence.Column; diff --git a/fineract-command/src/main/java/org/apache/fineract/command/persistence/mapping/CommandMapper.java b/fineract-command/src/main/java/org/apache/fineract/command/persistence/mapping/CommandMapper.java index 45487722d..31a2c4351 100644 --- a/fineract-command/src/main/java/org/apache/fineract/command/persistence/mapping/CommandMapper.java +++ b/fineract-command/src/main/java/org/apache/fineract/command/persistence/mapping/CommandMapper.java @@ -22,7 +22,7 @@ import static org.mapstruct.InjectionStrategy.CONSTRUCTOR; import static org.mapstruct.MappingConstants.ComponentModel.SPRING; import org.apache.fineract.command.core.Command; -import org.apache.fineract.command.persistence.model.CommandEntity; +import org.apache.fineract.command.persistence.domain.CommandEntity; import org.mapstruct.InheritInverseConfiguration; import org.mapstruct.Mapper; import org.mapstruct.Mapping; diff --git a/fineract-core/src/main/resources/META-INF/persistence.xml b/fineract-command/src/main/resources/jpa/static-weaving/module/command/persistence.xml similarity index 74% rename from fineract-core/src/main/resources/META-INF/persistence.xml rename to fineract-command/src/main/resources/jpa/static-weaving/module/command/persistence.xml index 105688157..465ba382f 100644 --- a/fineract-core/src/main/resources/META-INF/persistence.xml +++ b/fineract-command/src/main/resources/jpa/static-weaving/module/command/persistence.xml @@ -22,13 +22,19 @@ + xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> org.eclipse.persistence.jpa.PersistenceProvider + + + org.apache.fineract.command.persistence.domain.CommandEntity + org.apache.fineract.command.persistence.converter.JsonAttributeConverter + false diff --git a/fineract-core/build.gradle b/fineract-core/build.gradle index 1d0a8dc66..19281887d 100644 --- a/fineract-core/build.gradle +++ b/fineract-core/build.gradle @@ -22,32 +22,50 @@ apply plugin: 'java' apply plugin: 'eclipse' tasks.register('staticWeaveJpa', JavaExec) { - group = "build" - description = "Performs EclipseLink static weaving of entity classes" + dependsOn classes - dependsOn classes, processResources + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() + copy { + from file("src/main/resources/jpa/static-weaving/module/core/persistence.xml") + into "${persistenceInfo}/META-INF/" + } - def classesDir = file(sourceSets.main.output.classesDirs.asPath) - - mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave') + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") classpath = sourceSets.main.runtimeClasspath - args '-persistenceinfo', classesDir, classesDir, classesDir + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] } -staticWeaveJpa.doLast { - delete "${sourceSets.main.output.classesDirs.asPath}/META-INF/persistence.xml" + + +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") } -tasks.named('classes') { - finalizedBy staticWeaveJpa +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar } + + configurations { providedRuntime // needed for Spring Boot executable WAR providedCompile @@ -72,7 +90,7 @@ configurations { apply from: 'dependencies.gradle' compileJava { - dependsOn ':fineract-avro-schemas:compileJava', processResources + dependsOn ':fineract-avro-schemas:compileJava' options.compilerArgs += ['-parameters'] } @@ -101,3 +119,18 @@ if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { } } } + +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) +} diff --git a/fineract-charge/src/main/resources/META-INF/persistence.xml b/fineract-core/src/main/resources/jpa/static-weaving/module/core/persistence.xml similarity index 75% rename from fineract-charge/src/main/resources/META-INF/persistence.xml rename to fineract-core/src/main/resources/jpa/static-weaving/module/core/persistence.xml index 9d04d96a0..aeb8e6522 100644 --- a/fineract-charge/src/main/resources/META-INF/persistence.xml +++ b/fineract-core/src/main/resources/jpa/static-weaving/module/core/persistence.xml @@ -22,53 +22,51 @@ + xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> org.eclipse.persistence.jpa.PersistenceProvider - - org.apache.fineract.accounting.glaccount.domain.GLAccount - org.apache.fineract.accounting.journalentry.domain.JournalEntry - org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom - org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom - org.apache.fineract.infrastructure.codes.domain.Code - org.apache.fineract.infrastructure.codes.domain.CodeValue - org.apache.fineract.infrastructure.documentmanagement.domain.Image - org.apache.fineract.organisation.staff.domain.Staff - org.apache.fineract.organisation.office.domain.Office - org.apache.fineract.organisation.office.domain.OrganisationCurrency - org.apache.fineract.organisation.monetary.domain.ApplicationCurrency - org.apache.fineract.organisation.holiday.domain.Holiday - org.apache.fineract.organisation.workingdays.domain.WorkingDays - org.apache.fineract.portfolio.group.domain.Group - org.apache.fineract.portfolio.group.domain.GroupLevel - org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory - org.apache.fineract.portfolio.group.domain.GroupRole - org.apache.fineract.portfolio.client.domain.Client - org.apache.fineract.portfolio.client.domain.ClientIdentifier - org.apache.fineract.portfolio.rate.domain.Rate - org.apache.fineract.portfolio.fund.domain.Fund - org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket - org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange - org.apache.fineract.portfolio.paymenttype.domain.PaymentType - org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail - org.apache.fineract.portfolio.floatingrates.domain.FloatingRate - org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod - org.apache.fineract.portfolio.calendar.domain.Calendar - org.apache.fineract.portfolio.calendar.domain.CalendarHistory - org.apache.fineract.portfolio.calendar.domain.CalendarInstance - org.apache.fineract.useradministration.domain.AppUser + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.workingdays.domain.WorkingDays org.apache.fineract.useradministration.domain.Permission org.apache.fineract.useradministration.domain.AppUserClientMapping - - org.apache.fineract.portfolio.tax.domain.TaxGroup - org.apache.fineract.portfolio.tax.domain.TaxGroupMappings - org.apache.fineract.portfolio.tax.domain.TaxComponent - org.apache.fineract.portfolio.tax.domain.TaxComponentHistory + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.client.domain.ClientIdentifier + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + false diff --git a/fineract-document/build.gradle b/fineract-document/build.gradle index 8410fbff3..dd1e3bf65 100644 --- a/fineract-document/build.gradle +++ b/fineract-document/build.gradle @@ -22,32 +22,50 @@ apply plugin: 'java' apply plugin: 'eclipse' tasks.register('staticWeaveJpa', JavaExec) { - group = "build" - description = "Performs EclipseLink static weaving of entity classes" - dependsOn classes - def classesDir = file("$buildDir/classes/java/main") + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() + copy { + from file("src/main/resources/jpa/static-weaving/module/document/persistence.xml") + into "${persistenceInfo}/META-INF/" + } - mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave') + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") classpath = sourceSets.main.runtimeClasspath - args '-persistenceinfo', classesDir.absolutePath, classesDir.absolutePath, classesDir.absolutePath + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] } -staticWeaveJpa.doLast { - delete "${sourceSets.main.output.classesDirs.asPath}/META-INF/persistence.xml" + + +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") } -tasks.named('classes') { - finalizedBy staticWeaveJpa +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar } + + compileJava { dependsOn ':fineract-avro-schemas:buildJavaSdk' } @@ -100,3 +118,18 @@ if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { } } } + +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) +} diff --git a/fineract-branch/src/main/resources/META-INF/persistence.xml b/fineract-document/src/main/resources/jpa/static-weaving/module/document/persistence.xml similarity index 75% rename from fineract-branch/src/main/resources/META-INF/persistence.xml rename to fineract-document/src/main/resources/jpa/static-weaving/module/document/persistence.xml index ef4086d55..7b0325007 100644 --- a/fineract-branch/src/main/resources/META-INF/persistence.xml +++ b/fineract-document/src/main/resources/jpa/static-weaving/module/document/persistence.xml @@ -22,53 +22,54 @@ + xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> org.eclipse.persistence.jpa.PersistenceProvider - org.apache.fineract.accounting.glaccount.domain.GLAccount - org.apache.fineract.accounting.journalentry.domain.JournalEntry - org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom - org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom - org.apache.fineract.infrastructure.codes.domain.Code - org.apache.fineract.infrastructure.codes.domain.CodeValue - org.apache.fineract.infrastructure.documentmanagement.domain.Image - org.apache.fineract.organisation.staff.domain.Staff - org.apache.fineract.organisation.office.domain.Office - org.apache.fineract.organisation.office.domain.OrganisationCurrency - org.apache.fineract.organisation.monetary.domain.ApplicationCurrency - org.apache.fineract.organisation.holiday.domain.Holiday - org.apache.fineract.organisation.workingdays.domain.WorkingDays - org.apache.fineract.portfolio.group.domain.Group - org.apache.fineract.portfolio.group.domain.GroupLevel - org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory - org.apache.fineract.portfolio.group.domain.GroupRole - org.apache.fineract.portfolio.client.domain.Client - org.apache.fineract.portfolio.client.domain.ClientIdentifier - org.apache.fineract.portfolio.rate.domain.Rate - org.apache.fineract.portfolio.fund.domain.Fund - org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket - org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange - org.apache.fineract.portfolio.paymenttype.domain.PaymentType - org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail - org.apache.fineract.portfolio.tax.domain.TaxGroup - org.apache.fineract.portfolio.tax.domain.TaxGroupMappings - org.apache.fineract.portfolio.tax.domain.TaxComponent - org.apache.fineract.portfolio.tax.domain.TaxComponentHistory - org.apache.fineract.portfolio.floatingrates.domain.FloatingRate - org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod - org.apache.fineract.portfolio.calendar.domain.Calendar - org.apache.fineract.portfolio.calendar.domain.CalendarHistory - org.apache.fineract.portfolio.calendar.domain.CalendarInstance - org.apache.fineract.useradministration.domain.AppUser + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.workingdays.domain.WorkingDays org.apache.fineract.useradministration.domain.Permission org.apache.fineract.useradministration.domain.AppUserClientMapping - - org.apache.fineract.portfolio.charge.domain.Charge + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.client.domain.ClientIdentifier + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + + + org.apache.fineract.infrastructure.documentmanagement.domain.Document + false diff --git a/fineract-investor/build.gradle b/fineract-investor/build.gradle index 5fdbf51e3..ce13e7b06 100644 --- a/fineract-investor/build.gradle +++ b/fineract-investor/build.gradle @@ -22,32 +22,50 @@ apply plugin: 'java' apply plugin: 'eclipse' tasks.register('staticWeaveJpa', JavaExec) { - group = "build" - description = "Performs EclipseLink static weaving of entity classes" - dependsOn classes - def classesDir = file("$buildDir/classes/java/main") + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() + copy { + from file("src/main/resources/jpa/static-weaving/module/investor/persistence.xml") + into "${persistenceInfo}/META-INF/" + } - mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave') + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") classpath = sourceSets.main.runtimeClasspath - args '-persistenceinfo', classesDir.absolutePath, classesDir.absolutePath, classesDir.absolutePath + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] } -staticWeaveJpa.doLast { - delete "${sourceSets.main.output.classesDirs.asPath}/META-INF/persistence.xml" + + +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") } -tasks.named('classes') { - finalizedBy staticWeaveJpa +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar } + + compileJava { dependsOn ':fineract-avro-schemas:buildJavaSdk' } @@ -106,3 +124,18 @@ if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { } } } + +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) +} diff --git a/fineract-provider/src/main/resources/META-INF/persistence.xml b/fineract-investor/src/main/resources/jpa/static-weaving/module/investor/persistence.xml similarity index 71% rename from fineract-provider/src/main/resources/META-INF/persistence.xml rename to fineract-investor/src/main/resources/jpa/static-weaving/module/investor/persistence.xml index eba5ded16..4468eb515 100644 --- a/fineract-provider/src/main/resources/META-INF/persistence.xml +++ b/fineract-investor/src/main/resources/jpa/static-weaving/module/investor/persistence.xml @@ -22,59 +22,73 @@ + xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> org.eclipse.persistence.jpa.PersistenceProvider - - org.apache.fineract.accounting.glaccount.domain.GLAccount - org.apache.fineract.accounting.journalentry.domain.JournalEntry - org.apache.fineract.infrastructure.codes.domain.Code - org.apache.fineract.infrastructure.codes.domain.CodeValue - org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom - org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom + + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund org.apache.fineract.infrastructure.documentmanagement.domain.Image - org.apache.fineract.organisation.holiday.domain.Holiday - org.apache.fineract.organisation.monetary.domain.ApplicationCurrency - org.apache.fineract.organisation.monetary.domain.OrganisationCurrency - org.apache.fineract.organisation.office.domain.Office - org.apache.fineract.organisation.staff.domain.Staff org.apache.fineract.organisation.workingdays.domain.WorkingDays + org.apache.fineract.useradministration.domain.Permission + org.apache.fineract.useradministration.domain.AppUserClientMapping + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail org.apache.fineract.portfolio.calendar.domain.Calendar org.apache.fineract.portfolio.calendar.domain.CalendarHistory - org.apache.fineract.portfolio.calendar.domain.CalendarInstance - org.apache.fineract.portfolio.client.domain.Client org.apache.fineract.portfolio.client.domain.ClientIdentifier org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange - org.apache.fineract.portfolio.floatingrates.domain.FloatingRate - org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod - org.apache.fineract.portfolio.fund.domain.Fund - org.apache.fineract.portfolio.group.domain.Group - org.apache.fineract.portfolio.group.domain.GroupLevel - org.apache.fineract.portfolio.group.domain.GroupRole org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory - org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole org.apache.fineract.portfolio.paymenttype.domain.PaymentType - org.apache.fineract.portfolio.rate.domain.Rate - org.apache.fineract.useradministration.domain.AppUser - org.apache.fineract.useradministration.domain.AppUserClientMapping - org.apache.fineract.useradministration.domain.Permission - org.apache.fineract.useradministration.domain.Role - + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + + + org.apache.fineract.accounting.closure.domain.GLClosure + org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount + org.apache.fineract.accounting.glaccount.domain.TrialBalance + org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping + org.apache.fineract.accounting.rule.domain.AccountingRule + org.apache.fineract.accounting.rule.domain.AccountingTagRule + org.apache.fineract.accounting.journalentry.domain.JournalEntry + + + org.apache.fineract.portfolio.charge.domain.Charge + + org.apache.fineract.investor.domain.ExternalAssetOwner - org.apache.fineract.investor.domain.ExternalAssetOwnerJournalEntryMapping + org.apache.fineract.investor.domain.ExternalAssetOwnerLoanProductAttributes org.apache.fineract.investor.domain.ExternalAssetOwnerTransfer org.apache.fineract.investor.domain.ExternalAssetOwnerTransferDetails org.apache.fineract.investor.domain.ExternalAssetOwnerTransferJournalEntryMapping org.apache.fineract.investor.domain.ExternalAssetOwnerTransferLoanMapping - - org.apache.fineract.portfolio.collateral.domain.LoanCollateral - org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement - org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain + org.apache.fineract.investor.domain.ExternalAssetOwnerJournalEntryMapping + + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucketMappings org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyAction org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyTagHistory @@ -85,7 +99,6 @@ org.apache.fineract.portfolio.loanaccount.domain.LoanChargePaidBy org.apache.fineract.portfolio.loanaccount.domain.LoanCollateralManagement org.apache.fineract.portfolio.loanaccount.domain.LoanCreditAllocationRule - org.apache.fineract.portfolio.loanaccount.domain.LoanCreditAllocationRule org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails org.apache.fineract.portfolio.loanaccount.domain.LoanInstallmentCharge org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalcualtionAdditionalDetails @@ -96,6 +109,7 @@ org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment org.apache.fineract.portfolio.loanaccount.domain.LoanRescheduleRequestToTermVariationMapping org.apache.fineract.portfolio.loanaccount.domain.LoanStatusChangeHistory + org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations org.apache.fineract.portfolio.loanaccount.domain.LoanTopupDetails org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheCharge @@ -104,13 +118,8 @@ org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelation org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter - org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter + org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistory org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest - org.apache.fineract.portfolio.loanproduct.domain.AllocationType - org.apache.fineract.portfolio.loanproduct.domain.AllocationTypeListConverter - org.apache.fineract.portfolio.loanproduct.domain.CreditAllocationTransactionType - org.apache.fineract.portfolio.loanproduct.domain.DueType - org.apache.fineract.portfolio.loanproduct.domain.FutureInstallmentAllocationRule org.apache.fineract.portfolio.loanproduct.domain.LoanProduct org.apache.fineract.portfolio.loanproduct.domain.LoanProductBorrowerCycleVariations org.apache.fineract.portfolio.loanproduct.domain.LoanProductConfigurableAttributes @@ -120,48 +129,24 @@ org.apache.fineract.portfolio.loanproduct.domain.LoanProductInterestRecalculationDetails org.apache.fineract.portfolio.loanproduct.domain.LoanProductPaymentAllocationRule org.apache.fineract.portfolio.loanproduct.domain.LoanProductVariableInstallmentConfig - org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTransactionType - org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationType + org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTypeListConverter org.apache.fineract.portfolio.loanproduct.domain.SupportedInterestRefundTypesListConverter - org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks - org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter - - org.apache.fineract.interoperation.domain.InteropIdentifier - org.apache.fineract.portfolio.interestratechart.domain.InterestIncentives - org.apache.fineract.portfolio.interestratechart.domain.InterestRateChart - org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartSlab - org.apache.fineract.portfolio.savings.domain.DepositAccountInterestIncentives - org.apache.fineract.portfolio.savings.domain.DepositAccountInterestRateChart - org.apache.fineract.portfolio.savings.domain.DepositAccountInterestRateChartSlabs - org.apache.fineract.portfolio.savings.domain.DepositAccountOnHoldTransaction - org.apache.fineract.portfolio.savings.domain.DepositAccountTermAndPreClosure - org.apache.fineract.portfolio.savings.domain.DepositProductRecurringDetail - org.apache.fineract.portfolio.savings.domain.DepositProductTermAndPreClosure - org.apache.fineract.portfolio.savings.domain.FixedDepositAccount - org.apache.fineract.portfolio.savings.domain.FixedDepositProduct - org.apache.fineract.portfolio.savings.domain.GroupSavingsIndividualMonitoring - org.apache.fineract.portfolio.savings.domain.RecurringDepositAccount - org.apache.fineract.portfolio.savings.domain.RecurringDepositProduct - org.apache.fineract.portfolio.savings.domain.SavingsAccount - org.apache.fineract.portfolio.savings.domain.SavingsAccountCharge - org.apache.fineract.portfolio.savings.domain.SavingsAccountChargePaidBy - org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction - org.apache.fineract.portfolio.savings.domain.SavingsAccountTransactionTaxDetails - org.apache.fineract.portfolio.savings.domain.SavingsOfficerAssignmentHistory - org.apache.fineract.portfolio.savings.domain.SavingsProduct - - org.apache.fineract.accounting.rule.domain.AccountingRule - org.apache.fineract.accounting.rule.domain.AccountingTagRule - - org.apache.fineract.infrastructure.documentmanagement.domain.Document - - org.apache.fineract.portfolio.charge.domain.Charge - + org.apache.fineract.portfolio.loanproduct.domain.AllocationTypeListConverter + org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement + org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain + org.apache.fineract.portfolio.collateral.domain.LoanCollateral + + org.apache.fineract.portfolio.tax.domain.TaxComponent org.apache.fineract.portfolio.tax.domain.TaxComponentHistory org.apache.fineract.portfolio.tax.domain.TaxGroup org.apache.fineract.portfolio.tax.domain.TaxGroupMappings + + + org.apache.fineract.portfolio.floatingrates.domain.FloatingRate + org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod + false diff --git a/fineract-loan/build.gradle b/fineract-loan/build.gradle index 5d333cbad..3da2ce80e 100644 --- a/fineract-loan/build.gradle +++ b/fineract-loan/build.gradle @@ -22,31 +22,46 @@ apply plugin: 'java' apply plugin: 'eclipse' tasks.register('staticWeaveJpa', JavaExec) { - group = "build" - description = "Performs EclipseLink static weaving of entity classes" - dependsOn classes - def classesDir = file("$buildDir/classes/java/main") - def metaInf = new File(classesDir, "META-INF") - metaInf.mkdirs() - + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() copy { - from "src/main/resources/jpa/loan/persistence.xml" - into "$buildDir/classes/java/main/META-INF" + from file("src/main/resources/jpa/static-weaving/module/loan/persistence.xml") + into "${persistenceInfo}/META-INF/" } - mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave') + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") classpath = sourceSets.main.runtimeClasspath - args '-persistenceinfo', classesDir.absolutePath, classesDir.absolutePath, classesDir.absolutePath + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] } -staticWeaveJpa.doLast { - delete "${sourceSets.main.output.classesDirs.asPath}/META-INF/persistence.xml" + + +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") } -tasks.named('classes') { - finalizedBy staticWeaveJpa +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact +} + +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar } compileJava { @@ -114,8 +129,17 @@ if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { } } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) } diff --git a/fineract-investor/src/main/resources/META-INF/persistence.xml b/fineract-loan/src/main/resources/jpa/static-weaving/module/loan/persistence.xml similarity index 84% rename from fineract-investor/src/main/resources/META-INF/persistence.xml rename to fineract-loan/src/main/resources/jpa/static-weaving/module/loan/persistence.xml index e2d5a0b00..cf99a6070 100644 --- a/fineract-investor/src/main/resources/META-INF/persistence.xml +++ b/fineract-loan/src/main/resources/jpa/static-weaving/module/loan/persistence.xml @@ -22,61 +22,68 @@ + xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> org.eclipse.persistence.jpa.PersistenceProvider - org.apache.fineract.accounting.glaccount.domain.GLAccount - org.apache.fineract.accounting.journalentry.domain.JournalEntry - org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom - org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom - org.apache.fineract.infrastructure.codes.domain.Code - org.apache.fineract.infrastructure.codes.domain.CodeValue - org.apache.fineract.infrastructure.documentmanagement.domain.Image - org.apache.fineract.organisation.staff.domain.Staff - org.apache.fineract.organisation.office.domain.Office - org.apache.fineract.organisation.monetary.domain.OrganisationCurrency - org.apache.fineract.organisation.monetary.domain.ApplicationCurrency - org.apache.fineract.organisation.holiday.domain.Holiday - org.apache.fineract.organisation.workingdays.domain.WorkingDays - org.apache.fineract.portfolio.group.domain.Group - org.apache.fineract.portfolio.group.domain.GroupLevel - org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory - org.apache.fineract.portfolio.group.domain.GroupRole - org.apache.fineract.portfolio.client.domain.Client - org.apache.fineract.portfolio.client.domain.ClientIdentifier - org.apache.fineract.portfolio.rate.domain.Rate - org.apache.fineract.portfolio.fund.domain.Fund - org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket - org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange - org.apache.fineract.portfolio.charge.domain.Charge - org.apache.fineract.portfolio.paymenttype.domain.PaymentType - org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail - org.apache.fineract.portfolio.tax.domain.TaxGroup - org.apache.fineract.portfolio.tax.domain.TaxGroupMappings - org.apache.fineract.portfolio.tax.domain.TaxComponent - org.apache.fineract.portfolio.tax.domain.TaxComponentHistory - org.apache.fineract.portfolio.floatingrates.domain.FloatingRate - org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod - org.apache.fineract.portfolio.calendar.domain.Calendar - org.apache.fineract.portfolio.calendar.domain.CalendarHistory - org.apache.fineract.portfolio.calendar.domain.CalendarInstance - org.apache.fineract.useradministration.domain.AppUser + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.workingdays.domain.WorkingDays org.apache.fineract.useradministration.domain.Permission org.apache.fineract.useradministration.domain.AppUserClientMapping - - org.apache.fineract.portfolio.collateral.domain.LoanCollateral - org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement - org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.client.domain.ClientIdentifier + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + + + org.apache.fineract.accounting.closure.domain.GLClosure + org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount + org.apache.fineract.accounting.glaccount.domain.TrialBalance + org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping + org.apache.fineract.accounting.rule.domain.AccountingRule + org.apache.fineract.accounting.rule.domain.AccountingTagRule + org.apache.fineract.accounting.journalentry.domain.JournalEntry + + + org.apache.fineract.portfolio.charge.domain.Charge + + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucketMappings org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyAction org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyTagHistory org.apache.fineract.portfolio.delinquency.domain.LoanInstallmentDelinquencyTag - org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter org.apache.fineract.portfolio.loanaccount.domain.GroupLoanIndividualMonitoringAccount org.apache.fineract.portfolio.loanaccount.domain.Loan org.apache.fineract.portfolio.loanaccount.domain.LoanCharge @@ -93,6 +100,7 @@ org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment org.apache.fineract.portfolio.loanaccount.domain.LoanRescheduleRequestToTermVariationMapping org.apache.fineract.portfolio.loanaccount.domain.LoanStatusChangeHistory + org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations org.apache.fineract.portfolio.loanaccount.domain.LoanTopupDetails org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheCharge @@ -100,6 +108,9 @@ org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelation org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping + org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter + org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistory + org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest org.apache.fineract.portfolio.loanproduct.domain.LoanProduct org.apache.fineract.portfolio.loanproduct.domain.LoanProductBorrowerCycleVariations org.apache.fineract.portfolio.loanproduct.domain.LoanProductConfigurableAttributes @@ -109,20 +120,25 @@ org.apache.fineract.portfolio.loanproduct.domain.LoanProductInterestRecalculationDetails org.apache.fineract.portfolio.loanproduct.domain.LoanProductPaymentAllocationRule org.apache.fineract.portfolio.loanproduct.domain.LoanProductVariableInstallmentConfig - org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationType - org.apache.fineract.portfolio.loanproduct.domain.DueType - org.apache.fineract.portfolio.loanproduct.domain.AllocationType - org.apache.fineract.portfolio.loanproduct.domain.FutureInstallmentAllocationRule - org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTransactionType - org.apache.fineract.portfolio.loanproduct.domain.AllocationTypeListConverter - org.apache.fineract.portfolio.loanaccount.domain.LoanCreditAllocationRule - org.apache.fineract.portfolio.loanproduct.domain.CreditAllocationTransactionType + org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTypeListConverter org.apache.fineract.portfolio.loanproduct.domain.SupportedInterestRefundTypesListConverter - org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter - org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest - org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks - org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter + org.apache.fineract.portfolio.loanproduct.domain.AllocationTypeListConverter + org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement + org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain + org.apache.fineract.portfolio.collateral.domain.LoanCollateral + + + org.apache.fineract.portfolio.tax.domain.TaxComponent + org.apache.fineract.portfolio.tax.domain.TaxComponentHistory + org.apache.fineract.portfolio.tax.domain.TaxGroup + org.apache.fineract.portfolio.tax.domain.TaxGroupMappings + + + org.apache.fineract.portfolio.floatingrates.domain.FloatingRate + org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod + + false diff --git a/fineract-progressive-loan/build.gradle b/fineract-progressive-loan/build.gradle index 9017f54b4..458189342 100644 --- a/fineract-progressive-loan/build.gradle +++ b/fineract-progressive-loan/build.gradle @@ -22,32 +22,50 @@ apply plugin: 'java' apply plugin: 'eclipse' tasks.register('staticWeaveJpa', JavaExec) { - group = "build" - description = "Performs EclipseLink static weaving of entity classes" - dependsOn classes - def classesDir = file("$buildDir/classes/java/main") + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() + copy { + from file("src/main/resources/jpa/static-weaving/module/progressive-loan/persistence.xml") + into "${persistenceInfo}/META-INF/" + } - mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave') + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") classpath = sourceSets.main.runtimeClasspath - args '-persistenceinfo', classesDir.absolutePath, classesDir.absolutePath, classesDir.absolutePath + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] } -staticWeaveJpa.doLast { - delete "${sourceSets.main.output.classesDirs.asPath}/META-INF/persistence.xml" + + +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") } -tasks.named('classes') { - finalizedBy staticWeaveJpa +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar } + + compileJava { dependsOn ':fineract-avro-schemas:buildJavaSdk' } @@ -106,3 +124,18 @@ if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { } } } + +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) +} diff --git a/fineract-progressive-loan/src/main/resources/META-INF/persistence.xml b/fineract-progressive-loan/src/main/resources/jpa/static-weaving/module/progressive-loan/persistence.xml similarity index 86% rename from fineract-progressive-loan/src/main/resources/META-INF/persistence.xml rename to fineract-progressive-loan/src/main/resources/jpa/static-weaving/module/progressive-loan/persistence.xml index a5ff252eb..53b878af9 100644 --- a/fineract-progressive-loan/src/main/resources/META-INF/persistence.xml +++ b/fineract-progressive-loan/src/main/resources/jpa/static-weaving/module/progressive-loan/persistence.xml @@ -22,57 +22,68 @@ + xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> org.eclipse.persistence.jpa.PersistenceProvider - - org.apache.fineract.accounting.glaccount.domain.GLAccount - org.apache.fineract.accounting.journalentry.domain.JournalEntry - org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom - org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom - org.apache.fineract.infrastructure.codes.domain.Code - org.apache.fineract.infrastructure.codes.domain.CodeValue - org.apache.fineract.infrastructure.documentmanagement.domain.Image - org.apache.fineract.organisation.staff.domain.Staff - org.apache.fineract.organisation.office.domain.Office - org.apache.fineract.organisation.office.domain.OrganisationCurrency - org.apache.fineract.organisation.monetary.domain.ApplicationCurrency - org.apache.fineract.organisation.holiday.domain.Holiday - org.apache.fineract.organisation.workingdays.domain.WorkingDays - org.apache.fineract.portfolio.group.domain.Group - org.apache.fineract.portfolio.group.domain.GroupLevel - org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory - org.apache.fineract.portfolio.group.domain.GroupRole - org.apache.fineract.portfolio.client.domain.Client - org.apache.fineract.portfolio.client.domain.ClientIdentifier - org.apache.fineract.portfolio.rate.domain.Rate - org.apache.fineract.portfolio.fund.domain.Fund - org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket - org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange - org.apache.fineract.portfolio.paymenttype.domain.PaymentType - org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail - org.apache.fineract.portfolio.floatingrates.domain.FloatingRate - org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod - org.apache.fineract.portfolio.calendar.domain.Calendar - org.apache.fineract.portfolio.calendar.domain.CalendarHistory - org.apache.fineract.portfolio.calendar.domain.CalendarInstance - org.apache.fineract.useradministration.domain.AppUser + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.workingdays.domain.WorkingDays org.apache.fineract.useradministration.domain.Permission org.apache.fineract.useradministration.domain.AppUserClientMapping - - org.apache.fineract.portfolio.collateral.domain.LoanCollateral - org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement - org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.client.domain.ClientIdentifier + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + + + org.apache.fineract.accounting.closure.domain.GLClosure + org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount + org.apache.fineract.accounting.glaccount.domain.TrialBalance + org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping + org.apache.fineract.accounting.rule.domain.AccountingRule + org.apache.fineract.accounting.rule.domain.AccountingTagRule + org.apache.fineract.accounting.journalentry.domain.JournalEntry + + + org.apache.fineract.portfolio.charge.domain.Charge + + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucketMappings org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyAction org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyTagHistory org.apache.fineract.portfolio.delinquency.domain.LoanInstallmentDelinquencyTag - org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter org.apache.fineract.portfolio.loanaccount.domain.GroupLoanIndividualMonitoringAccount org.apache.fineract.portfolio.loanaccount.domain.Loan org.apache.fineract.portfolio.loanaccount.domain.LoanCharge @@ -89,6 +100,7 @@ org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment org.apache.fineract.portfolio.loanaccount.domain.LoanRescheduleRequestToTermVariationMapping org.apache.fineract.portfolio.loanaccount.domain.LoanStatusChangeHistory + org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations org.apache.fineract.portfolio.loanaccount.domain.LoanTopupDetails org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheCharge @@ -96,6 +108,9 @@ org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelation org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping + org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter + org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistory + org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest org.apache.fineract.portfolio.loanproduct.domain.LoanProduct org.apache.fineract.portfolio.loanproduct.domain.LoanProductBorrowerCycleVariations org.apache.fineract.portfolio.loanproduct.domain.LoanProductConfigurableAttributes @@ -105,35 +120,27 @@ org.apache.fineract.portfolio.loanproduct.domain.LoanProductInterestRecalculationDetails org.apache.fineract.portfolio.loanproduct.domain.LoanProductPaymentAllocationRule org.apache.fineract.portfolio.loanproduct.domain.LoanProductVariableInstallmentConfig - org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationType - org.apache.fineract.portfolio.loanproduct.domain.DueType - org.apache.fineract.portfolio.loanproduct.domain.AllocationType - org.apache.fineract.portfolio.loanproduct.domain.FutureInstallmentAllocationRule - org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTransactionType - org.apache.fineract.portfolio.loanproduct.domain.AllocationTypeListConverter - org.apache.fineract.portfolio.loanaccount.domain.LoanCreditAllocationRule - org.apache.fineract.portfolio.loanproduct.domain.CreditAllocationTransactionType + org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTypeListConverter org.apache.fineract.portfolio.loanproduct.domain.SupportedInterestRefundTypesListConverter - org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter - org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest - org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks - org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter - - org.apache.fineract.portfolio.charge.domain.Charge - - org.apache.fineract.accounting.closure.domain.GLClosure - org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount - org.apache.fineract.accounting.glaccount.domain.GLAccount - org.apache.fineract.accounting.journalentry.domain.JournalEntry - org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping - org.apache.fineract.accounting.rule.domain.AccountingRule - org.apache.fineract.accounting.rule.domain.AccountingTagRule - - org.apache.fineract.portfolio.tax.domain.TaxGroup - org.apache.fineract.portfolio.tax.domain.TaxGroupMappings + org.apache.fineract.portfolio.loanproduct.domain.AllocationTypeListConverter + org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement + org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain + org.apache.fineract.portfolio.collateral.domain.LoanCollateral + + org.apache.fineract.portfolio.tax.domain.TaxComponent org.apache.fineract.portfolio.tax.domain.TaxComponentHistory + org.apache.fineract.portfolio.tax.domain.TaxGroup + org.apache.fineract.portfolio.tax.domain.TaxGroupMappings + + + org.apache.fineract.portfolio.floatingrates.domain.FloatingRate + org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod + + + org.apache.fineract.portfolio.loanaccount.domain.LoanCapitalizedIncomeBalance + org.apache.fineract.portfolio.loanaccount.domain.ProgressiveLoanModel false diff --git a/fineract-provider/build.gradle b/fineract-provider/build.gradle index 8c7bfe536..51d79f16a 100644 --- a/fineract-provider/build.gradle +++ b/fineract-provider/build.gradle @@ -31,30 +31,54 @@ apply plugin: 'se.thinkcode.cucumber-runner' check.dependsOn('cucumber') tasks.register('staticWeaveJpa', JavaExec) { - group = "build" - description = "Performs EclipseLink static weaving of entity classes" - dependsOn classes - def classesDir = file("$buildDir/classes/java/main") + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() + copy { + from file("src/main/resources/jpa/static-weaving/module/provider/persistence.xml") + into "${persistenceInfo}/META-INF/" + } - mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave') + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") classpath = sourceSets.main.runtimeClasspath - args '-persistenceinfo', classesDir.absolutePath, classesDir.absolutePath, classesDir.absolutePath + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] } -staticWeaveJpa.doLast { - delete "${sourceSets.main.output.classesDirs.asPath}/META-INF/persistence.xml" +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") } -tasks.named('classes') { - finalizedBy staticWeaveJpa +tasks.register("weavedPlainJar", Jar) { + archiveClassifier.set("plain") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + + from(layout.buildDirectory.dir("weaved-classes")) + + exclude("META-INF/persistence.xml") } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedPlainJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact +} + +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar } tasks.named('staticWeaveJpa') { @@ -244,7 +268,22 @@ tasks.register('setBlankPassword') { } } +tasks.register("mergeWeavedOutput", Copy) { + dependsOn staticWeaveJpa + from layout.buildDirectory.dir("weaved-classes") + into layout.buildDirectory.dir("merged-weaved-classes/java/main") + // Optional: exclude files like persistence.xml + exclude("META-INF/persistence.xml") +} + bootRun { + dependsOn mergeWeavedOutput + + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + + classpath = files(weavedClasses) + sourceSets.main.runtimeClasspath.filter { file -> + file.name.endsWith('.jar') + } jvmArgs = [ "-Dspring.output.ansi.enabled=ALWAYS" ] @@ -259,13 +298,64 @@ springBoot { mainClass = 'org.apache.fineract.ServerApplication' } -bootJar { - duplicatesStrategy = DuplicatesStrategy.EXCLUDE - manifest { - attributes('Main-Class': 'org.springframework.boot.loader.launch.PropertiesLauncher', 'Implementation-Title': 'Apache Fineract', 'Implementation-Version': project.version) - } - archiveClassifier = '' +// Create a new weavedBootJar task that extends BootJar +tasks.register("weavedBootJar", org.springframework.boot.gradle.tasks.bundling.BootJar) { + group = "build" + description = "Builds a bootable JAR with weaved classes" + dependsOn staticWeaveJpa dependsOn resolve + + archiveClassifier.set("") + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + + //Required for bootable JAR + mainClass.set("org.apache.fineract.ServerApplication") + targetJavaVersion.set(JavaVersion.VERSION_21) + + // Replace default classes with weaved ones + into("BOOT-INF/classes") { + from(layout.buildDirectory.dir("weaved-classes")) + } + + manifest { + attributes( + 'Main-Class': 'org.springframework.boot.loader.launch.PropertiesLauncher', + 'Implementation-Title': 'Apache Fineract', + 'Implementation-Version': project.version, + 'Start-Class': 'org.apache.fineract.ServerApplication' + ) + } + classpath configurations.runtimeClasspath +} + +// Configure the bootJar task to include all dependencies +tasks.withType(org.springframework.boot.gradle.tasks.bundling.BootJar) { + // This ensures the launcher is included + requiresUnpack '**/*.jar' + + // This ensures the launcher classes are included + launchScript() +} + +// Make assemble depend on weavedBootJar instead of bootJar +tasks.named('assemble') { + dependsOn 'weavedBootJar' +} + +// Disable the default bootJar task +bootJar { + dependsOn weavedBootJar + enabled = false +} + +// Ensure jib uses the weaved classes +tasks.named('jibDockerBuild') { + dependsOn 'staticWeaveJpa' +} + +// Ensure staticWeaveJpa runs before jib +tasks.named('jib') { + dependsOn 'staticWeaveJpa' } jib { @@ -302,6 +392,15 @@ jib { user = 'nobody:nogroup' } + extraDirectories { + paths { + path { + from = layout.buildDirectory.dir("weaved-classes").get().asFile + into = '/app/classes' + } + } + } + allowInsecureRegistries = true dependencies { @@ -417,3 +516,50 @@ tasks.register('devRun', org.springframework.boot.gradle.tasks.run.BootRun) { println "Running in development mode - quality checks are disabled" } } + +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) +} + +tasks.register("weavedCucumberTest", JavaExec) { + group = "verification" + description = "Runs Cucumber tests with weaved classes" + + dependsOn staticWeaveJpa, compileTestJava, processTestResources + + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) + + mainClass.set("io.cucumber.core.cli.Main") // Cucumber JUnit 5 CLI entrypoint + + args = [ + '--glue', 'org.apache.fineract', // your step defs package + 'src/test/resources/features' // your feature files path + ] + + jvmArgs = ["-Dspring.output.ansi.enabled=ALWAYS"] +} + +tasks.named("cucumber") { + dependsOn weavedCucumberTest + enabled = false +} diff --git a/fineract-provider/src/main/resources/jpa/static-weaving/module/provider/persistence.xml b/fineract-provider/src/main/resources/jpa/static-weaving/module/provider/persistence.xml new file mode 100644 index 000000000..fb51c9430 --- /dev/null +++ b/fineract-provider/src/main/resources/jpa/static-weaving/module/provider/persistence.xml @@ -0,0 +1,367 @@ + + + + + + + + + + org.eclipse.persistence.jpa.PersistenceProvider + + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.workingdays.domain.WorkingDays + org.apache.fineract.useradministration.domain.Permission + org.apache.fineract.useradministration.domain.AppUserClientMapping + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.client.domain.ClientIdentifier + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + + + org.apache.fineract.accounting.closure.domain.GLClosure + org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount + org.apache.fineract.accounting.glaccount.domain.TrialBalance + org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping + org.apache.fineract.accounting.rule.domain.AccountingRule + org.apache.fineract.accounting.rule.domain.AccountingTagRule + org.apache.fineract.accounting.journalentry.domain.JournalEntry + + + org.apache.fineract.infrastructure.creditbureau.domain.CreditBureauToken + org.apache.fineract.infrastructure.creditbureau.domain.CreditReport + org.apache.fineract.infrastructure.creditbureau.domain.CreditBureau + org.apache.fineract.infrastructure.creditbureau.domain.CreditBureauLoanProductMapping + org.apache.fineract.infrastructure.creditbureau.domain.CreditBureauConfiguration + org.apache.fineract.infrastructure.creditbureau.domain.OrganisationCreditBureau + + + org.apache.fineract.infrastructure.configuration.domain.ExternalService + org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty + org.apache.fineract.infrastructure.configuration.domain.ExternalServicesProperties + + + org.apache.fineract.infrastructure.bulkimport.domain.ImportDocument + + + org.apache.fineract.infrastructure.survey.domain.Likelihood + + + org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityRelation + org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityToEntityMapping + org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityAccess + + + org.apache.fineract.infrastructure.sms.domain.SmsMessage + org.apache.fineract.infrastructure.campaigns.sms.domain.SmsCampaign + + + org.apache.fineract.infrastructure.security.domain.TFAccessToken + org.apache.fineract.infrastructure.security.domain.TwoFactorConfiguration + + + org.apache.fineract.infrastructure.campaigns.email.domain.EmailCampaign + org.apache.fineract.infrastructure.campaigns.email.domain.EmailConfiguration + org.apache.fineract.infrastructure.campaigns.email.domain.EmailMessage + + + org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat + + + org.apache.fineract.portfolio.client.domain.ClientFamilyMembers + org.apache.fineract.portfolio.client.domain.ClientNonPerson + org.apache.fineract.portfolio.client.domain.ClientTransferDetails + org.apache.fineract.portfolio.client.domain.ClientAddress + org.apache.fineract.portfolio.client.domain.ClientCharge + org.apache.fineract.portfolio.client.domain.ClientTransaction + org.apache.fineract.portfolio.client.domain.ClientChargePaidBy + + + org.apache.fineract.portfolio.meeting.domain.Meeting + org.apache.fineract.portfolio.meeting.attendance.domain.ClientAttendance + + + org.apache.fineract.infrastructure.hooks.domain.Hook + org.apache.fineract.infrastructure.hooks.domain.HookResource + org.apache.fineract.infrastructure.hooks.domain.HookTemplate + org.apache.fineract.infrastructure.hooks.domain.Schema + org.apache.fineract.infrastructure.hooks.domain.HookConfiguration + + + org.apache.fineract.portfolio.address.domain.FieldConfiguration + org.apache.fineract.portfolio.address.domain.Address + + + org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityRelation + org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityToEntityMapping + org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityAccess + + + org.apache.fineract.portfolio.self.account.domain.SelfBeneficiariesTPT + org.apache.fineract.portfolio.self.device.domain.DeviceRegistration + org.apache.fineract.portfolio.self.pockets.domain.Pocket + org.apache.fineract.portfolio.self.pockets.domain.PocketAccountMapping + org.apache.fineract.portfolio.self.registration.domain.SelfServiceRegistration + + + + org.apache.fineract.command.persistence.domain.CommandEntity + org.apache.fineract.command.persistence.converter.JsonAttributeConverter + + + org.apache.fineract.portfolio.charge.domain.Charge + + + org.apache.fineract.organisation.teller.domain.CashierTransaction + org.apache.fineract.organisation.teller.domain.Teller + org.apache.fineract.organisation.teller.domain.Cashier + org.apache.fineract.organisation.teller.domain.TellerTransaction + + + org.apache.fineract.investor.domain.ExternalAssetOwner + org.apache.fineract.investor.domain.ExternalAssetOwnerLoanProductAttributes + org.apache.fineract.investor.domain.ExternalAssetOwnerTransfer + org.apache.fineract.investor.domain.ExternalAssetOwnerTransferDetails + org.apache.fineract.investor.domain.ExternalAssetOwnerTransferJournalEntryMapping + org.apache.fineract.investor.domain.ExternalAssetOwnerTransferLoanMapping + org.apache.fineract.investor.domain.ExternalAssetOwnerJournalEntryMapping + + + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucketMappings + org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyAction + org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyTagHistory + org.apache.fineract.portfolio.delinquency.domain.LoanInstallmentDelinquencyTag + org.apache.fineract.portfolio.loanaccount.domain.GroupLoanIndividualMonitoringAccount + org.apache.fineract.portfolio.loanaccount.domain.Loan + org.apache.fineract.portfolio.loanaccount.domain.LoanCharge + org.apache.fineract.portfolio.loanaccount.domain.LoanChargePaidBy + org.apache.fineract.portfolio.loanaccount.domain.LoanCollateralManagement + org.apache.fineract.portfolio.loanaccount.domain.LoanCreditAllocationRule + org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails + org.apache.fineract.portfolio.loanaccount.domain.LoanInstallmentCharge + org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalcualtionAdditionalDetails + org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalculationDetails + org.apache.fineract.portfolio.loanaccount.domain.LoanOfficerAssignmentHistory + org.apache.fineract.portfolio.loanaccount.domain.LoanOverdueInstallmentCharge + org.apache.fineract.portfolio.loanaccount.domain.LoanPaymentAllocationRule + org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment + org.apache.fineract.portfolio.loanaccount.domain.LoanRescheduleRequestToTermVariationMapping + org.apache.fineract.portfolio.loanaccount.domain.LoanStatusChangeHistory + org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter + org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations + org.apache.fineract.portfolio.loanaccount.domain.LoanTopupDetails + org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheCharge + org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheDisbursementCharge + org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction + org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelation + org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping + org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter + org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistory + org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest + org.apache.fineract.portfolio.loanproduct.domain.LoanProduct + org.apache.fineract.portfolio.loanproduct.domain.LoanProductBorrowerCycleVariations + org.apache.fineract.portfolio.loanproduct.domain.LoanProductConfigurableAttributes + org.apache.fineract.portfolio.loanproduct.domain.LoanProductCreditAllocationRule + org.apache.fineract.portfolio.loanproduct.domain.LoanProductFloatingRates + org.apache.fineract.portfolio.loanproduct.domain.LoanProductGuaranteeDetails + org.apache.fineract.portfolio.loanproduct.domain.LoanProductInterestRecalculationDetails + org.apache.fineract.portfolio.loanproduct.domain.LoanProductPaymentAllocationRule + org.apache.fineract.portfolio.loanproduct.domain.LoanProductVariableInstallmentConfig + org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks + org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTypeListConverter + org.apache.fineract.portfolio.loanproduct.domain.SupportedInterestRefundTypesListConverter + org.apache.fineract.portfolio.loanproduct.domain.AllocationTypeListConverter + org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement + org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain + org.apache.fineract.portfolio.collateral.domain.LoanCollateral + + + org.apache.fineract.infrastructure.documentmanagement.domain.Document + + + org.apache.fineract.portfolio.tax.domain.TaxComponent + org.apache.fineract.portfolio.tax.domain.TaxComponentHistory + org.apache.fineract.portfolio.tax.domain.TaxGroup + org.apache.fineract.portfolio.tax.domain.TaxGroupMappings + + + org.apache.fineract.portfolio.floatingrates.domain.FloatingRate + org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod + + + org.apache.fineract.interoperation.domain.InteropIdentifier + org.apache.fineract.portfolio.interestratechart.domain.InterestIncentives + org.apache.fineract.portfolio.interestratechart.domain.InterestRateChart + org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartSlab + org.apache.fineract.portfolio.savings.domain.DepositAccountInterestIncentive + org.apache.fineract.portfolio.savings.domain.DepositAccountInterestIncentives + org.apache.fineract.portfolio.savings.domain.DepositAccountInterestRateChart + org.apache.fineract.portfolio.savings.domain.DepositAccountInterestRateChartSlabs + org.apache.fineract.portfolio.savings.domain.DepositAccountOnHoldTransaction + org.apache.fineract.portfolio.savings.domain.DepositAccountTermAndPreClosure + org.apache.fineract.portfolio.savings.domain.DepositProductRecurringDetail + org.apache.fineract.portfolio.savings.domain.DepositProductTermAndPreClosure + org.apache.fineract.portfolio.savings.domain.FixedDepositProduct + org.apache.fineract.portfolio.savings.domain.GroupSavingsIndividualMonitoring + org.apache.fineract.portfolio.savings.domain.RecurringDepositProduct + org.apache.fineract.portfolio.savings.domain.SavingsAccount + org.apache.fineract.portfolio.savings.domain.SavingsAccountCharge + org.apache.fineract.portfolio.savings.domain.SavingsAccountChargePaidBy + org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction + org.apache.fineract.portfolio.savings.domain.SavingsAccountTransactionTaxDetails + org.apache.fineract.portfolio.savings.domain.SavingsOfficerAssignmentHistory + org.apache.fineract.portfolio.savings.domain.SavingsProduct + + + org.apache.fineract.portfolio.loanaccount.domain.LoanCapitalizedIncomeBalance + org.apache.fineract.portfolio.loanaccount.domain.ProgressiveLoanModel + + + org.apache.fineract.portfolio.account.domain.AccountAssociations + org.apache.fineract.portfolio.account.domain.AccountTransferDetails + org.apache.fineract.portfolio.account.domain.AccountTransferStandingInstruction + org.apache.fineract.portfolio.account.domain.AccountTransferTransaction + + + + org.apache.fineract.notification.domain.NotificationMapper + org.apache.fineract.notification.domain.Notification + + + org.apache.fineract.adhocquery.domain.AdHoc + + + org.apache.fineract.mix.domain.MixTaxonomyMapping + + + org.apache.fineract.cob.domain.LoanAccountLock + org.apache.fineract.cob.domain.BatchBusinessStep + + + org.apache.fineract.template.domain.Template + org.apache.fineract.template.domain.TemplateMapper + + + org.apache.fineract.accounting.provisioning.domain.LoanProductProvisioningEntry + org.apache.fineract.accounting.provisioning.domain.ProvisioningEntry + + + org.apache.fineract.useradministration.domain.AppUserPreviousPassword + org.apache.fineract.useradministration.domain.PasswordValidationPolicy + + + org.apache.fineract.spm.domain.Question + org.apache.fineract.spm.domain.LookupTable + org.apache.fineract.spm.domain.Component + org.apache.fineract.spm.domain.Scorecard + org.apache.fineract.spm.domain.Survey + org.apache.fineract.spm.domain.Response + + + org.apache.fineract.portfolio.loanproduct.productmix.domain.ProductMix + + + org.apache.fineract.organisation.provisioning.domain.ProvisioningCriteria + org.apache.fineract.organisation.provisioning.domain.LoanProductProvisionCriteria + org.apache.fineract.organisation.provisioning.domain.ProvisioningCriteriaDefinition + org.apache.fineract.organisation.provisioning.domain.ProvisioningCategory + + + org.apache.fineract.organisation.office.domain.OfficeTransaction + + + org.apache.fineract.portfolio.self.registration.domain.SelfServiceRegistration + + + org.apache.fineract.portfolio.note.domain.Note + + + org.apache.fineract.portfolio.savings.domain.RecurringDepositScheduleInstallment + org.apache.fineract.portfolio.savings.domain.FixedDepositAccount + org.apache.fineract.portfolio.savings.domain.RecurringDepositAccount + org.apache.fineract.portfolio.savings.domain.DepositAccountRecurringDetail + + + org.apache.fineract.portfolio.shareproducts.domain.ShareProductDividendPayOutDetails + org.apache.fineract.portfolio.shareproducts.domain.ShareProduct + org.apache.fineract.portfolio.shareproducts.domain.ShareProductMarketPrice + + + org.apache.fineract.portfolio.shareaccounts.domain.ShareAccount + org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountCharge + org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountChargePaidBy + org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountDividendDetails + org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountTransaction + + + org.apache.fineract.infrastructure.reportmailingjob.domain.ReportMailingJob + org.apache.fineract.infrastructure.reportmailingjob.domain.ReportMailingJobConfiguration + org.apache.fineract.infrastructure.reportmailingjob.domain.ReportMailingJobRunHistory + + + org.apache.fineract.infrastructure.dataqueries.domain.RegisteredDatatable + org.apache.fineract.infrastructure.dataqueries.domain.Report + org.apache.fineract.infrastructure.dataqueries.domain.ReportParameterUsage + org.apache.fineract.infrastructure.dataqueries.domain.ReportParameter + org.apache.fineract.infrastructure.dataqueries.domain.EntityDatatableChecks + + + org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorFundingDetails + org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorFundingTransaction + org.apache.fineract.portfolio.loanaccount.guarantor.domain.Guarantor + + false + + + + + diff --git a/fineract-rates/build.gradle b/fineract-rates/build.gradle index 36e88f449..c6cbed7ef 100644 --- a/fineract-rates/build.gradle +++ b/fineract-rates/build.gradle @@ -22,32 +22,50 @@ apply plugin: 'java' apply plugin: 'eclipse' tasks.register('staticWeaveJpa', JavaExec) { - group = "build" - description = "Performs EclipseLink static weaving of entity classes" - dependsOn classes - def classesDir = file("$buildDir/classes/java/main") + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() + copy { + from file("src/main/resources/jpa/static-weaving/module/rates/persistence.xml") + into "${persistenceInfo}/META-INF/" + } - mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave') + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") classpath = sourceSets.main.runtimeClasspath - args '-persistenceinfo', classesDir.absolutePath, classesDir.absolutePath, classesDir.absolutePath + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] } -staticWeaveJpa.doLast { - delete "${sourceSets.main.output.classesDirs.asPath}/META-INF/persistence.xml" + + +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") } -tasks.named('classes') { - finalizedBy staticWeaveJpa +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar } + + compileJava { dependsOn ':fineract-avro-schemas:buildJavaSdk' } @@ -112,3 +130,18 @@ if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { } } } + +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) +} diff --git a/fineract-tax/src/main/resources/META-INF/persistence.xml b/fineract-rates/src/main/resources/jpa/static-weaving/module/rates/persistence.xml similarity index 80% rename from fineract-tax/src/main/resources/META-INF/persistence.xml rename to fineract-rates/src/main/resources/jpa/static-weaving/module/rates/persistence.xml index d3ba0d405..f6aa61581 100644 --- a/fineract-tax/src/main/resources/META-INF/persistence.xml +++ b/fineract-rates/src/main/resources/jpa/static-weaving/module/rates/persistence.xml @@ -22,52 +22,55 @@ + xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> org.eclipse.persistence.jpa.PersistenceProvider - - org.apache.fineract.accounting.glaccount.domain.GLAccount - org.apache.fineract.accounting.journalentry.domain.JournalEntry - org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom - org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom - org.apache.fineract.infrastructure.codes.domain.Code - org.apache.fineract.infrastructure.codes.domain.CodeValue - org.apache.fineract.infrastructure.documentmanagement.domain.Image - org.apache.fineract.organisation.staff.domain.Staff - org.apache.fineract.organisation.office.domain.Office - org.apache.fineract.organisation.office.domain.OrganisationCurrency - org.apache.fineract.organisation.monetary.domain.ApplicationCurrency - org.apache.fineract.organisation.holiday.domain.Holiday - org.apache.fineract.organisation.workingdays.domain.WorkingDays - org.apache.fineract.portfolio.group.domain.Group - org.apache.fineract.portfolio.group.domain.GroupLevel - org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory - org.apache.fineract.portfolio.group.domain.GroupRole - org.apache.fineract.portfolio.client.domain.Client - org.apache.fineract.portfolio.client.domain.ClientIdentifier - org.apache.fineract.portfolio.rate.domain.Rate - org.apache.fineract.portfolio.fund.domain.Fund - org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket - org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange - org.apache.fineract.portfolio.paymenttype.domain.PaymentType - org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail - org.apache.fineract.portfolio.tax.domain.TaxGroup - org.apache.fineract.portfolio.tax.domain.TaxGroupMappings - org.apache.fineract.portfolio.tax.domain.TaxComponent - org.apache.fineract.portfolio.tax.domain.TaxComponentHistory - org.apache.fineract.portfolio.floatingrates.domain.FloatingRate - org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod - org.apache.fineract.portfolio.calendar.domain.Calendar - org.apache.fineract.portfolio.calendar.domain.CalendarHistory - org.apache.fineract.portfolio.calendar.domain.CalendarInstance - org.apache.fineract.useradministration.domain.AppUser + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.workingdays.domain.WorkingDays org.apache.fineract.useradministration.domain.Permission org.apache.fineract.useradministration.domain.AppUserClientMapping + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.client.domain.ClientIdentifier + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + + + org.apache.fineract.portfolio.floatingrates.domain.FloatingRate + org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod + false diff --git a/fineract-report/build.gradle b/fineract-report/build.gradle index 16e958dfe..7e1d51567 100644 --- a/fineract-report/build.gradle +++ b/fineract-report/build.gradle @@ -22,32 +22,50 @@ apply plugin: 'java' apply plugin: 'eclipse' tasks.register('staticWeaveJpa', JavaExec) { - group = "build" - description = "Performs EclipseLink static weaving of entity classes" - dependsOn classes - def classesDir = file("$buildDir/classes/java/main") + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() + copy { + from file("src/main/resources/jpa/static-weaving/module/report/persistence.xml") + into "${persistenceInfo}/META-INF/" + } - mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave') + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") classpath = sourceSets.main.runtimeClasspath - args '-persistenceinfo', classesDir.absolutePath, classesDir.absolutePath, classesDir.absolutePath + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] } -staticWeaveJpa.doLast { - delete "${sourceSets.main.output.classesDirs.asPath}/META-INF/persistence.xml" + + +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") } -tasks.named('classes') { - finalizedBy staticWeaveJpa +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar } + + compileJava { dependsOn ':fineract-avro-schemas:buildJavaSdk' } @@ -112,3 +130,18 @@ if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { } } } + +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) +} diff --git a/fineract-document/src/main/resources/META-INF/persistence.xml b/fineract-report/src/main/resources/jpa/static-weaving/module/report/persistence.xml similarity index 75% rename from fineract-document/src/main/resources/META-INF/persistence.xml rename to fineract-report/src/main/resources/jpa/static-weaving/module/report/persistence.xml index 0c3e741c3..aeb8e6522 100644 --- a/fineract-document/src/main/resources/META-INF/persistence.xml +++ b/fineract-report/src/main/resources/jpa/static-weaving/module/report/persistence.xml @@ -22,49 +22,51 @@ + xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> org.eclipse.persistence.jpa.PersistenceProvider - - org.apache.fineract.accounting.glaccount.domain.GLAccount - org.apache.fineract.accounting.journalentry.domain.JournalEntry - org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom - org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom - org.apache.fineract.infrastructure.codes.domain.Code - org.apache.fineract.infrastructure.codes.domain.CodeValue - org.apache.fineract.infrastructure.documentmanagement.domain.Image - org.apache.fineract.organisation.staff.domain.Staff - org.apache.fineract.organisation.office.domain.Office - org.apache.fineract.organisation.office.domain.OrganisationCurrency - org.apache.fineract.organisation.monetary.domain.ApplicationCurrency - org.apache.fineract.organisation.holiday.domain.Holiday - org.apache.fineract.organisation.workingdays.domain.WorkingDays - org.apache.fineract.portfolio.group.domain.Group - org.apache.fineract.portfolio.group.domain.GroupLevel - org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory - org.apache.fineract.portfolio.group.domain.GroupRole - org.apache.fineract.portfolio.client.domain.Client - org.apache.fineract.portfolio.client.domain.ClientIdentifier - org.apache.fineract.portfolio.fund.domain.Fund - org.apache.fineract.portfolio.paymenttype.domain.PaymentType - org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail - org.apache.fineract.portfolio.tax.domain.TaxGroup - org.apache.fineract.portfolio.tax.domain.TaxGroupMappings - org.apache.fineract.portfolio.tax.domain.TaxComponent - org.apache.fineract.portfolio.tax.domain.TaxComponentHistory - org.apache.fineract.portfolio.calendar.domain.Calendar - org.apache.fineract.portfolio.calendar.domain.CalendarHistory - org.apache.fineract.portfolio.calendar.domain.CalendarInstance - org.apache.fineract.useradministration.domain.AppUser + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.workingdays.domain.WorkingDays org.apache.fineract.useradministration.domain.Permission org.apache.fineract.useradministration.domain.AppUserClientMapping - - org.apache.fineract.portfolio.charge.domain.Charge + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.client.domain.ClientIdentifier + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + false diff --git a/fineract-savings/build.gradle b/fineract-savings/build.gradle index 7e6b6eb97..e915417d4 100644 --- a/fineract-savings/build.gradle +++ b/fineract-savings/build.gradle @@ -21,33 +21,53 @@ description = 'Fineract Savings' apply plugin: 'java' apply plugin: 'eclipse' -tasks.register('staticWeaveJpa', JavaExec) { - group = "build" - description = "Performs EclipseLink static weaving of entity classes" - - dependsOn classes - - def classesDir = file("$buildDir/classes/java/main") - - mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave') - classpath = sourceSets.main.runtimeClasspath - args '-persistenceinfo', classesDir.absolutePath, classesDir.absolutePath, classesDir.absolutePath -} - -staticWeaveJpa.doLast { - delete "${sourceSets.main.output.classesDirs.asPath}/META-INF/persistence.xml" -} - tasks.named('classes') { finalizedBy staticWeaveJpa } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } +tasks.register('staticWeaveJpa', JavaExec) { + dependsOn classes + + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() + copy { + from file("src/main/resources/jpa/static-weaving/module/savings/persistence.xml") + into "${persistenceInfo}/META-INF/" + } + + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") + classpath = sourceSets.main.runtimeClasspath + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] } +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") +} + +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact +} + +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar +} + + + compileJava { dependsOn ':fineract-avro-schemas:buildJavaSdk' } @@ -112,3 +132,18 @@ if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { } } } + +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) +} diff --git a/fineract-savings/src/main/resources/META-INF/persistence.xml b/fineract-savings/src/main/resources/META-INF/persistence.xml deleted file mode 100644 index fcd1b4aa3..000000000 --- a/fineract-savings/src/main/resources/META-INF/persistence.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - org.eclipse.persistence.jpa.PersistenceProvider - - org.apache.fineract.accounting.glaccount.domain.GLAccount - org.apache.fineract.accounting.journalentry.domain.JournalEntry - org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom - org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom - org.apache.fineract.infrastructure.codes.domain.Code - org.apache.fineract.infrastructure.codes.domain.CodeValue - org.apache.fineract.infrastructure.documentmanagement.domain.Image - org.apache.fineract.organisation.staff.domain.Staff - org.apache.fineract.organisation.office.domain.Office - org.apache.fineract.organisation.office.domain.OrganisationCurrency - org.apache.fineract.organisation.monetary.domain.ApplicationCurrency - org.apache.fineract.organisation.holiday.domain.Holiday - org.apache.fineract.organisation.workingdays.domain.WorkingDays - org.apache.fineract.portfolio.group.domain.Group - org.apache.fineract.portfolio.group.domain.GroupLevel - org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory - org.apache.fineract.portfolio.group.domain.GroupRole - org.apache.fineract.portfolio.client.domain.Client - org.apache.fineract.portfolio.client.domain.ClientIdentifier - org.apache.fineract.portfolio.fund.domain.Fund - org.apache.fineract.portfolio.paymenttype.domain.PaymentType - org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail - org.apache.fineract.portfolio.calendar.domain.Calendar - org.apache.fineract.portfolio.calendar.domain.CalendarHistory - org.apache.fineract.portfolio.calendar.domain.CalendarInstance - org.apache.fineract.useradministration.domain.AppUser - org.apache.fineract.useradministration.domain.Role - org.apache.fineract.useradministration.domain.Permission - org.apache.fineract.useradministration.domain.AppUserClientMapping - - org.apache.fineract.portfolio.charge.domain.Charge - - org.apache.fineract.portfolio.tax.domain.TaxGroup - org.apache.fineract.portfolio.tax.domain.TaxGroupMappings - org.apache.fineract.portfolio.tax.domain.TaxComponent - org.apache.fineract.portfolio.tax.domain.TaxComponentHistory - false - - - - - diff --git a/fineract-savings/src/main/resources/jpa/static-weaving/module/savings/persistence.xml b/fineract-savings/src/main/resources/jpa/static-weaving/module/savings/persistence.xml new file mode 100644 index 000000000..60ec696bb --- /dev/null +++ b/fineract-savings/src/main/resources/jpa/static-weaving/module/savings/persistence.xml @@ -0,0 +1,123 @@ + + + + + + + + + + org.eclipse.persistence.jpa.PersistenceProvider + + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.workingdays.domain.WorkingDays + org.apache.fineract.useradministration.domain.Permission + org.apache.fineract.useradministration.domain.AppUserClientMapping + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.client.domain.ClientIdentifier + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + + + org.apache.fineract.accounting.closure.domain.GLClosure + org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount + org.apache.fineract.accounting.glaccount.domain.TrialBalance + org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping + org.apache.fineract.accounting.rule.domain.AccountingRule + org.apache.fineract.accounting.rule.domain.AccountingTagRule + org.apache.fineract.accounting.journalentry.domain.JournalEntry + + + + org.apache.fineract.portfolio.tax.domain.TaxComponent + org.apache.fineract.portfolio.tax.domain.TaxComponentHistory + org.apache.fineract.portfolio.tax.domain.TaxGroup + org.apache.fineract.portfolio.tax.domain.TaxGroupMappings + + + org.apache.fineract.portfolio.floatingrates.domain.FloatingRate + org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod + + + org.apache.fineract.interoperation.domain.InteropIdentifier + org.apache.fineract.portfolio.interestratechart.domain.InterestIncentives + org.apache.fineract.portfolio.interestratechart.domain.InterestRateChart + org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartSlab + org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartFields + org.apache.fineract.portfolio.savings.domain.DepositAccountInterestIncentive + org.apache.fineract.portfolio.savings.domain.DepositAccountInterestIncentives + org.apache.fineract.portfolio.savings.domain.DepositAccountInterestRateChart + org.apache.fineract.portfolio.savings.domain.DepositAccountInterestRateChartSlabs + org.apache.fineract.portfolio.savings.domain.DepositAccountOnHoldTransaction + org.apache.fineract.portfolio.savings.domain.DepositAccountTermAndPreClosure + org.apache.fineract.portfolio.savings.domain.DepositProductRecurringDetail + org.apache.fineract.portfolio.savings.domain.DepositProductTermAndPreClosure + org.apache.fineract.portfolio.savings.domain.FixedDepositProduct + org.apache.fineract.portfolio.savings.domain.GroupSavingsIndividualMonitoring + org.apache.fineract.portfolio.savings.domain.RecurringDepositProduct + org.apache.fineract.portfolio.savings.domain.SavingsAccount + org.apache.fineract.portfolio.savings.domain.SavingsAccountCharge + org.apache.fineract.portfolio.savings.domain.SavingsAccountChargePaidBy + org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction + org.apache.fineract.portfolio.savings.domain.SavingsAccountTransactionTaxDetails + org.apache.fineract.portfolio.savings.domain.SavingsOfficerAssignmentHistory + org.apache.fineract.portfolio.savings.domain.SavingsProduct + + + org.apache.fineract.portfolio.charge.domain.Charge + + false + + + + + diff --git a/fineract-tax/build.gradle b/fineract-tax/build.gradle index a03a02887..170bb0c38 100644 --- a/fineract-tax/build.gradle +++ b/fineract-tax/build.gradle @@ -22,32 +22,50 @@ apply plugin: 'java' apply plugin: 'eclipse' tasks.register('staticWeaveJpa', JavaExec) { - group = "build" - description = "Performs EclipseLink static weaving of entity classes" - dependsOn classes - def classesDir = file("$buildDir/classes/java/main") + def classesDir = layout.buildDirectory.dir("classes/java/main").get().asFile + def outputDir = layout.buildDirectory.dir("weaved-classes").get().asFile + def persistenceInfo = layout.buildDirectory.dir('static-weaving').get() + copy { + from file("src/main/resources/jpa/static-weaving/module/tax/persistence.xml") + into "${persistenceInfo}/META-INF/" + } - mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave') + mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave") classpath = sourceSets.main.runtimeClasspath - args '-persistenceinfo', classesDir.absolutePath, classesDir.absolutePath, classesDir.absolutePath + + args = [ + '-persistenceinfo', persistenceInfo, + classesDir.absolutePath, + outputDir.absolutePath + ] } -staticWeaveJpa.doLast { - delete "${sourceSets.main.output.classesDirs.asPath}/META-INF/persistence.xml" + + +tasks.register("weavedJar", Jar) { + archiveClassifier.set("") + dependsOn staticWeaveJpa + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(layout.buildDirectory.dir("weaved-classes")) + exclude("META-INF/persistence.xml") } -tasks.named('classes') { - finalizedBy staticWeaveJpa +// Configure the default jar task to depend on weavedJar and use its output +tasks.named('jar') { + dependsOn weavedJar + enabled = false // Disable the default jar task + // The weavedJar will be used as the primary artifact } -tasks.named('processResources') { - from('src/main/resources') - into sourceSets.main.java.classesDirectory - outputs.upToDateWhen { false } +// Make sure the assemble task depends on weavedJar +tasks.named('assemble') { + dependsOn weavedJar } + + compileJava { dependsOn ':fineract-avro-schemas:buildJavaSdk' } @@ -112,3 +130,18 @@ if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { } } } + +tasks.named("test") { + dependsOn staticWeaveJpa + + def testClasses = layout.buildDirectory.dir("classes/java/test").get().asFile + def weavedClasses = layout.buildDirectory.dir("weaved-classes").get().asFile + def testResources = layout.buildDirectory.dir("resources/test").get().asFile + + classpath = files( + weavedClasses, + testClasses, + testResources, + configurations.testRuntimeClasspath + ) +} diff --git a/fineract-report/src/main/resources/META-INF/persistence.xml b/fineract-tax/src/main/resources/jpa/static-weaving/module/tax/persistence.xml similarity index 81% rename from fineract-report/src/main/resources/META-INF/persistence.xml rename to fineract-tax/src/main/resources/jpa/static-weaving/module/tax/persistence.xml index d3ba0d405..5a440edcc 100644 --- a/fineract-report/src/main/resources/META-INF/persistence.xml +++ b/fineract-tax/src/main/resources/jpa/static-weaving/module/tax/persistence.xml @@ -22,52 +22,57 @@ + xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> org.eclipse.persistence.jpa.PersistenceProvider - - org.apache.fineract.accounting.glaccount.domain.GLAccount - org.apache.fineract.accounting.journalentry.domain.JournalEntry - org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom - org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom - org.apache.fineract.infrastructure.codes.domain.Code - org.apache.fineract.infrastructure.codes.domain.CodeValue - org.apache.fineract.infrastructure.documentmanagement.domain.Image - org.apache.fineract.organisation.staff.domain.Staff - org.apache.fineract.organisation.office.domain.Office - org.apache.fineract.organisation.office.domain.OrganisationCurrency - org.apache.fineract.organisation.monetary.domain.ApplicationCurrency - org.apache.fineract.organisation.holiday.domain.Holiday - org.apache.fineract.organisation.workingdays.domain.WorkingDays - org.apache.fineract.portfolio.group.domain.Group - org.apache.fineract.portfolio.group.domain.GroupLevel - org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory - org.apache.fineract.portfolio.group.domain.GroupRole - org.apache.fineract.portfolio.client.domain.Client - org.apache.fineract.portfolio.client.domain.ClientIdentifier - org.apache.fineract.portfolio.rate.domain.Rate - org.apache.fineract.portfolio.fund.domain.Fund - org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket - org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange - org.apache.fineract.portfolio.paymenttype.domain.PaymentType - org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail - org.apache.fineract.portfolio.tax.domain.TaxGroup - org.apache.fineract.portfolio.tax.domain.TaxGroupMappings - org.apache.fineract.portfolio.tax.domain.TaxComponent - org.apache.fineract.portfolio.tax.domain.TaxComponentHistory - org.apache.fineract.portfolio.floatingrates.domain.FloatingRate - org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod - org.apache.fineract.portfolio.calendar.domain.Calendar - org.apache.fineract.portfolio.calendar.domain.CalendarHistory - org.apache.fineract.portfolio.calendar.domain.CalendarInstance - org.apache.fineract.useradministration.domain.AppUser + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.workingdays.domain.WorkingDays org.apache.fineract.useradministration.domain.Permission org.apache.fineract.useradministration.domain.AppUserClientMapping + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.client.domain.ClientIdentifier + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + + + org.apache.fineract.portfolio.tax.domain.TaxComponent + org.apache.fineract.portfolio.tax.domain.TaxComponentHistory + org.apache.fineract.portfolio.tax.domain.TaxGroup + org.apache.fineract.portfolio.tax.domain.TaxGroupMappings + false