FINERACT-2122: Add devRun gradle task, optimize build caching, fix deprecations

This commit is contained in:
Kristof Jozsa
2025-01-22 17:03:24 +01:00
committed by Adam Saghy
parent ddc8b1a0a7
commit 384a52bbaf
33 changed files with 556 additions and 175 deletions
+94 -12
View File
@@ -150,11 +150,39 @@ allprojects {
mavenCentral()
}
configurations {
api {
canBeResolved = true
}
}
apply plugin: 'com.adarshr.test-logger'
apply plugin: 'com.diffplug.spotless'
apply plugin: 'com.github.hierynomus.license'
apply plugin: 'net.ltgt.errorprone'
tasks.withType(JavaCompile).configureEach {
options.errorprone {
disableWarningsInGeneratedCode = true
disable(
"CanIgnoreReturnValueSuggester",
"SameNameButDifferent", // Until errorprone recognizes Lombok
"MultiVariableDeclaration", // Until errorprone recognizes Lombok
"UnnecessaryDefaultInEnumSwitch", // FINERACT-1911
"AssertEqualsArgumentOrderChecker",
"RemoveUnusedImports" // For generated code
)
error(
"DefaultCharset",
"StringSplitter",
"MutablePublicArray",
"EqualsGetClass",
"FutureReturnValueIgnored"
)
}
}
apply plugin: 'org.nosphere.apache.rat'
apply plugin: 'project-report'
apply plugin: 'com.github.jk1.dependency-license-report'
// Configuration for the sonarqube plugin is now in GitHub Actions
@@ -324,10 +352,49 @@ configure(project.fineractJavaProjects) {
apply plugin: 'java'
apply plugin: 'idea'
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
withSourcesJar()
withJavadocJar()
}
tasks.withType(ProcessResources) {
destinationDir = layout.buildDirectory.dir('classes/java/main').get().asFile
}
// Add performance optimizations
configurations.all {
resolutionStrategy {
cacheChangingModulesFor 0, 'seconds'
cacheDynamicVersionsFor 0, 'seconds'
}
}
tasks.withType(JavaCompile).configureEach {
options.incremental = true
options.fork = true
outputs.cacheIf { true }
options.compilerArgs << '-parameters'
options.encoding = 'UTF-8'
options.compilerArgs << '-Xlint:unchecked'
options.compilerArgs << '-Xlint:deprecation'
if (project.hasProperty('warnings') && project.warnings.contains('fail')) {
options.compilerArgs << '-Werror'
}
if (project.hasProperty('warnings') && project.warnings.contains('none')) {
options.compilerArgs << '-nowarn'
}
if (project.plugins.hasPlugin('org.springframework.boot')) {
options.generatedSourceOutputDirectory = file("$buildDir/generated/sources/annotationProcessor/java/main")
}
options.generatedSourceOutputDirectory = file("$buildDir/generated/sources/annotationProcessor/java/main")
}
apply plugin: 'eclipse'
apply plugin: 'checkstyle'
apply plugin: 'jacoco'
apply plugin: 'net.ltgt.errorprone'
apply plugin: 'com.github.spotbugs'
apply plugin: 'com.github.andygoossens.modernizer'
apply from: "${rootDir}/buildSrc/src/main/groovy/org.apache.fineract.dependencies.gradle"
@@ -335,9 +402,9 @@ configure(project.fineractJavaProjects) {
group = 'org.apache.fineract'
/* define the valid syntax level for source files */
sourceCompatibility = JavaVersion.VERSION_17
/* define binary compatibility version */
targetCompatibility = JavaVersion.VERSION_17
// sourceCompatibility = JavaVersion.VERSION_17
// /* define binary compatibility version */
// targetCompatibility = JavaVersion.VERSION_17
/* http://stackoverflow.com/questions/19653311/jpa-repository-works-in-idea-and-production-but-not-in-gradle */
sourceSets.main.output.resourcesDir = sourceSets.main.java.classesDirectory
@@ -353,7 +420,6 @@ configure(project.fineractJavaProjects) {
}
configurations {
implementation.setCanBeResolved(true)
api.setCanBeResolved(true)
}
tasks.withType(Copy) {
@@ -361,10 +427,8 @@ configure(project.fineractJavaProjects) {
}
tasks.withType(JavaCompile) {
options.compilerArgs += [
"-Xlint:unchecked",
"-Xlint:cast",
"-Xlint:auxiliaryclass",
"-Xlint:deprecation",
"-Xlint:dep-ann",
"-Xlint:divzero",
"-Xlint:empty",
@@ -398,6 +462,10 @@ configure(project.fineractJavaProjects) {
options.deprecation = true
}
check {
dependsOn(rat, licenseMain, licenseTest)
}
dependencies {
spotbugsPlugins 'jp.skypencil.findbugs.slf4j:bug-pattern:1.5.0@jar'
}
@@ -469,7 +537,7 @@ configure(project.fineractJavaProjects) {
reports {
html.required = true
xml.required = true
html.destination file("${buildDir}/code-coverage")
html.outputLocation = layout.buildDirectory.dir('code-coverage')
}
}
@@ -479,11 +547,12 @@ configure(project.fineractJavaProjects) {
errorprone "com.google.errorprone:error_prone_core:2.35.1"
}
tasks.withType(JavaCompile) {
tasks.withType(JavaCompile).configureEach {
options.errorprone {
enabled = project.gradle.startParameter.taskNames.contains('build') || project.gradle.startParameter.taskNames.contains('check')
disableWarningsInGeneratedCode = true
excludedPaths = ".*/build/.*"
if (project.path == ':fineract-client') {
excludedPaths = '.*/build/generated/java/src/main/java/.*'
}
disable(
// TODO Remove disabled checks from this list, by fixing remaining usages
"UnusedVariable",
@@ -669,6 +738,19 @@ configure(project.fineractJavaProjects) {
'java/util/Optional.get:()Ljava/lang/Object;' // Disable forcing the usage of Optional.orElseThrow(java.util.function.Supplier<? extends X>)
]
}
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options.encoding = 'UTF-8'
// Disable strict checking to prevent build failures on invalid javadoc
options.addBooleanOption('html5', true)
// Add this if you're using Java 17 records or other modern features
if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17)) {
options.addBooleanOption('html5', true)
}
// Ignore any errors during javadoc generation
failOnError = false
}
}
configure(project.fineractCustomProjects) {