Files

190 lines
6.5 KiB
Groovy

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
description = 'Fineract WAR'
apply plugin: 'war'
apply plugin: 'distribution'
apply from: "${rootDir}/buildSrc/src/main/groovy/org.apache.fineract.dependencies.gradle"
war {
description = 'Assembles a WAR archive containing the web application'
archiveFileName = 'fineract-provider.war'
// Enable caching
outputs.cacheIf { true }
// Track inputs explicitly
inputs.files(project.configurations.runtimeClasspath)
.withPropertyName("runtimeClasspath")
.withPathSensitivity(PathSensitivity.RELATIVE)
inputs.files(project.sourceSets.main.output.classesDirs)
.withPropertyName("classes")
.withPathSensitivity(PathSensitivity.RELATIVE)
def licensesDir = file("$rootDir/licenses/binary/")
if (licensesDir.exists()) {
inputs.dir(licensesDir)
.withPropertyName("licenses")
.withPathSensitivity(PathSensitivity.RELATIVE)
from(licensesDir) {
into "WEB-INF/licenses/binary/"
}
}
def legalFiles = [
file("$rootDir/LICENSE_RELEASE"),
file("$rootDir/NOTICE_RELEASE"),
file("$rootDir/DISCLAIMER")
].findAll { it.exists() }
if (!legalFiles.empty) {
inputs.files(legalFiles)
.withPropertyName("legalFiles")
.withPathSensitivity(PathSensitivity.RELATIVE)
}
legalFiles.each { file ->
from(file) {
into "WEB-INF/"
}
}
rename ('LICENSE_RELEASE', 'LICENSE')
rename ('NOTICE_RELEASE', 'NOTICE')
enabled = true
archiveClassifier = ''
// Ensure reproducible output
preserveFileTimestamps = false
reproducibleFileOrder = true
}
dependencies {
implementation project(':fineract-core')
implementation project(':fineract-accounting')
implementation project(':fineract-investor')
implementation project(':fineract-branch')
implementation project(':fineract-document')
implementation project(':fineract-mix')
implementation project(':fineract-charge')
implementation project(':fineract-rates')
implementation project(':fineract-loan')
implementation project(':fineract-loan-origination')
implementation project(':fineract-progressive-loan')
implementation project(':fineract-savings')
implementation project(':fineract-provider')
implementation project(':fineract-working-capital-loan')
}
tasks.withType(Tar) {
compression Compression.GZIP
archiveExtension = 'tar.gz'
// Enable caching for all tar tasks
outputs.cacheIf { true }
// Ensure reproducible output
preserveFileTimestamps = false
reproducibleFileOrder = true
}
distributions {
binary {
distributionBaseName = 'apache-fineract-bin'
contents {
// Track inputs explicitly for binary distribution
filesMatching('**/*.jar') {
it.path = it.path.replaceAll('-\\d+\\.\\d+\\.\\d+(-SNAPSHOT)?', '-' + version)
}
from ("$rootDir/fineract-client/build/libs/") {
include 'fineract-client-*.jar'
}
from ("$rootDir/fineract-avro-schemas/build/libs/") {
include 'fineract-avro-schemas-*.jar'
}
from ("$rootDir/fineract-provider/build/libs/") {
include 'fineract-provider-*.jar'
exclude 'fineract-provider-*-plain.jar'
}
from war
from("$rootDir/licenses/") {
into "licenses/"
}
from "$rootDir/LICENSE_RELEASE"
from "$rootDir/NOTICE_RELEASE"
rename ('LICENSE_RELEASE', 'LICENSE')
rename ('NOTICE_RELEASE', 'NOTICE')
from "$rootDir/DISCLAIMER"
from "$rootDir/README.md"
from "$rootDir/fineract-doc/build/docs/pdf/en/index.pdf"
rename ('index.pdf', 'fineract-documentation.pdf')
from "$rootDir/.atr-rat-excludes-bin.txt"
rename ('.atr-rat-excludes-bin.txt', '.rat-excludes')
}
}
src {
distributionBaseName = 'apache-fineract-src'
contents {
// Track inputs explicitly for source distribution
from("$rootDir/") {
exclude '**/build' , '.git', '**/.gradle', '.github', '**/.settings', '**/.project',
'**/.classpath', '.idea', 'out', '._.DS_Store', '.DS_Store', 'WebContent',
'**/.externalToolbuilders', '.theia', 'LICENSE_RELEASE',
'NOTICE_RELEASE', '**/licenses', '*.class', '**/bin', '*.log', '.dockerignore',
'**/.gitkeep', '*.swp', '.atr-rat-excludes-bin.txt'
// Ensure consistent file paths for caching
eachFile { details ->
details.path = details.path.replace('\\', '/')
}
}
rename ('LICENSE_SOURCE', 'LICENSE')
rename ('NOTICE_SOURCE', 'NOTICE')
rename ('.atr-rat-excludes-src.txt', '.rat-excludes')
}
}
}
// Configure specific tar tasks
tasks.named('binaryDistTar') {
description = 'Assembles the binary distribution as a tar archive'
outputs.cacheIf { true }
// Track dependencies explicitly
dependsOn(war, ':fineract-client:jar', ':fineract-avro-schemas:jar',
':fineract-provider:build', ':fineract-doc:doc',
':fineract-client:javadocJar', ':fineract-client:sourcesJar',
':fineract-avro-schemas:javadocJar', ':fineract-avro-schemas:sourcesJar')
}
tasks.named('srcDistTar') {
description = 'Assembles the source distribution as a tar archive'
outputs.cacheIf { true }
}
// Disable zip distributions as they're not needed
binaryDistZip.enabled false
srcDistZip.enabled false