diff --git a/dependencies.gradle b/dependencies.gradle index fc453879416..d6100a5e9bf 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -84,7 +84,7 @@ ext { 'bootstrap.version' : '5.3.3', 'commons-codec.version' : '1.17.1', 'geb-spock.version' : '7.0', - 'groovy.version' : '4.0.26', + 'groovy.version': '4.0.27-SNAPSHOT', 'h2.version' : '2.3.232', 'jackson.version' : '2.18.2', 'jquery.version' : '3.7.1', @@ -107,24 +107,24 @@ ext { // Note: the name of the dependency must be the prefix of the property name so properties in the pom are resolved correctly bomDependencies = [ - 'asset-pipeline-grails' : "com.bertramlabs.plugins:asset-pipeline-grails:${bomDependencyVersions['asset-pipeline-grails.version']}", - 'bootstrap' : "org.webjars.npm:bootstrap:${bomDependencyVersions['bootstrap.version']}", - 'bootstrap-icons' : "org.webjars.npm:bootstrap-icons:${bomDependencyVersions['bootstrap-icons.version']}", - 'commons-codec' : "commons-codec:commons-codec:${bomDependencyVersions['commons-codec.version']}", - 'geb-spock' : "org.gebish:geb-spock:${bomDependencyVersions['geb-spock.version']}", - 'h2' : "com.h2database:h2:${bomDependencyVersions['h2.version']}", - 'jquery' : "org.webjars.npm:jquery:${bomDependencyVersions['jquery.version']}", - 'liquibase-hibernate5' : "org.liquibase:liquibase:${bomDependencyVersions['liquibase-hibernate5.version']}", - 'liquibase-hibernate5-cdi' : "org.liquibase:liquibase-cdi:${bomDependencyVersions['liquibase-hibernate5.version']}", - 'liquibase-hibernate5-core' : "org.liquibase:liquibase-core:${bomDependencyVersions['liquibase-hibernate5.version']}", - 'liquibase-hibernate5-ext' : "org.liquibase.ext:liquibase5-hibernate:${bomDependencyVersions['liquibase-hibernate5.version']}", - 'mongodb-bson' : "org.mongodb:bson:${bomDependencyVersions['mongodb.version']}", - 'mongodb-driver-core' : "org.mongodb:mongodb-driver-core:${bomDependencyVersions['mongodb.version']}", - 'mongodb-driver-sync' : "org.mongodb:mongodb-driver-sync:${bomDependencyVersions['mongodb.version']}", - 'mongodb-record-codec' : "org.mongodb:bson-record-codec:${bomDependencyVersions['mongodb.version']}", - 'rxjava' : "io.reactivex:rxjava:${bomDependencyVersions['rxjava.version']}", - 'rxjava2' : "io.reactivex.rxjava2:rxjava:${bomDependencyVersions['rxjava2.version']}", - 'rxjava3' : "io.reactivex.rxjava3:rxjava:${bomDependencyVersions['rxjava3.version']}", + 'asset-pipeline-grails' : "com.bertramlabs.plugins:asset-pipeline-grails:${bomDependencyVersions['asset-pipeline-grails.version']}", + 'bootstrap' : "org.webjars.npm:bootstrap:${bomDependencyVersions['bootstrap.version']}", + 'bootstrap-icons' : "org.webjars.npm:bootstrap-icons:${bomDependencyVersions['bootstrap-icons.version']}", + 'commons-codec' : "commons-codec:commons-codec:${bomDependencyVersions['commons-codec.version']}", + 'geb-spock' : "org.gebish:geb-spock:${bomDependencyVersions['geb-spock.version']}", + 'h2' : "com.h2database:h2:${bomDependencyVersions['h2.version']}", + 'jquery' : "org.webjars.npm:jquery:${bomDependencyVersions['jquery.version']}", + 'liquibase-hibernate5' : "org.liquibase:liquibase:${bomDependencyVersions['liquibase-hibernate5.version']}", + 'liquibase-hibernate5-cdi' : "org.liquibase:liquibase-cdi:${bomDependencyVersions['liquibase-hibernate5.version']}", + 'liquibase-hibernate5-core': "org.liquibase:liquibase-core:${bomDependencyVersions['liquibase-hibernate5.version']}", + 'liquibase-hibernate5-ext' : "org.liquibase.ext:liquibase5-hibernate:${bomDependencyVersions['liquibase-hibernate5.version']}", + 'mongodb-bson' : "org.mongodb:bson:${bomDependencyVersions['mongodb.version']}", + 'mongodb-driver-core' : "org.mongodb:mongodb-driver-core:${bomDependencyVersions['mongodb.version']}", + 'mongodb-driver-sync' : "org.mongodb:mongodb-driver-sync:${bomDependencyVersions['mongodb.version']}", + 'mongodb-record-codec' : "org.mongodb:bson-record-codec:${bomDependencyVersions['mongodb.version']}", + 'rxjava' : "io.reactivex:rxjava:${bomDependencyVersions['rxjava.version']}", + 'rxjava2' : "io.reactivex.rxjava2:rxjava:${bomDependencyVersions['rxjava2.version']}", + 'rxjava3' : "io.reactivex.rxjava3:rxjava:${bomDependencyVersions['rxjava3.version']}", ] // Because pom exclusions aren't properly supported by gradle, we can't inherit the grails-gradle-bom diff --git a/etc/bin/test-reproducible-builds.sh b/etc/bin/test-reproducible-builds.sh index 9990ea9a8f8..31c171a76ba 100755 --- a/etc/bin/test-reproducible-builds.sh +++ b/etc/bin/test-reproducible-builds.sh @@ -21,6 +21,7 @@ set -e export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) +CWD=$(pwd) SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) cd "${SCRIPT_DIR}/../.." @@ -29,6 +30,9 @@ mkdir -p "${SCRIPT_DIR}/results" git clean -xdf --exclude='etc/bin' killall -e java || true +cd grails-gradle +./gradlew build --rerun-tasks -PskipTests --no-build-cache +cd .. ./gradlew build --rerun-tasks -PskipTests --no-build-cache "${SCRIPT_DIR}/generate-build-artifact-hashes.groovy" > "${SCRIPT_DIR}/results/first.txt" mkdir -p "${SCRIPT_DIR}/results/first" @@ -36,12 +40,14 @@ find . -path ./etc -prune -o -type f -path '*/build/libs/*.jar' -print0 | xargs git clean -xdf --exclude='etc/bin' killall -e java || true +cd grails-gradle +./gradlew build --rerun-tasks -PskipTests --no-build-cache +cd .. ./gradlew build --rerun-tasks -PskipTests --no-build-cache "${SCRIPT_DIR}/generate-build-artifact-hashes.groovy" > "${SCRIPT_DIR}/results/second.txt" mkdir -p "${SCRIPT_DIR}/results/second" find . -path ./etc -prune -o -type f -path '*/build/libs/*.jar' -print0 | xargs -0 cp --parents -t "${SCRIPT_DIR}/results/second/" -cd - cd "${SCRIPT_DIR}/results" # diff -u first.txt second.txt @@ -61,4 +67,4 @@ find second -type f -name '*.jar' -print | sed 's|^second/||' | grep -F -x -v -f done rm toPurge.txt find . -type d -empty -delete -cd - +cd "$CWD" diff --git a/gradle.properties b/gradle.properties index 16558c0f317..1b11ad29f1a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -52,7 +52,7 @@ org.gradle.caching=true # org.gradle.configuration-cache=true org.gradle.parallel=true org.gradle.daemon=true -org.gradle.jvmargs=-Dfile.encoding=UTF-8 -Xmx1536M -XX:MaxMetaspaceSize=1024M +org.gradle.jvmargs=-Dfile.encoding=UTF-8 -Xmx1792M -XX:MaxMetaspaceSize=1024M # libraries only specific to test apps, these should not be exposed jbossTransactionApiVersion=2.0.0.Final diff --git a/gradle/docs-config.gradle b/gradle/docs-config.gradle index 28f0578b48c..54d72ea1353 100644 --- a/gradle/docs-config.gradle +++ b/gradle/docs-config.gradle @@ -23,13 +23,13 @@ ext { includeInApiDocs = true } -tasks.named('groovydoc', Groovydoc).configure { +tasks.named('groovydoc', Groovydoc).configure { Groovydoc it -> // TODO: Fix this for testFixtures - classpath = configurations.documentation - groovyClasspath = configurations.documentation - access = GroovydocAccess.PROTECTED - includeAuthor = true - includeMainForScripts = false - processScripts = false - noTimestamp = true + it.classpath = configurations.documentation + it.groovyClasspath = configurations.documentation + it.access = GroovydocAccess.PROTECTED + it.includeAuthor = false + it.includeMainForScripts = false + it.processScripts = false + it.noTimestamp = true } \ No newline at end of file diff --git a/gradle/docs-dependencies.gradle b/gradle/docs-dependencies.gradle index c50c12eafc8..05c91962fa6 100644 --- a/gradle/docs-dependencies.gradle +++ b/gradle/docs-dependencies.gradle @@ -16,15 +16,24 @@ * specific language governing permissions and limitations * under the License. */ +configurations.register('documentation') { + canBeConsumed = false + canBeResolved = true + attributes { + attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, Category.LIBRARY)) + attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling, Bundling.EXTERNAL)) + attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, Usage.JAVA_RUNTIME)) + } +} -configurations.register('documentation') dependencies { - add('documentation', platform("org.apache.grails:grails-gradle-bom:${projectVersion}")) + add('documentation', platform(project(':grails-bom'))) add('documentation', 'org.fusesource.jansi:jansi') add('documentation', 'jline:jline') add('documentation', 'com.github.javaparser:javaparser-core') - add('documentation', 'org.codehaus.groovy:groovy') - add('documentation', 'org.codehaus.groovy:groovy-ant') - add('documentation', 'org.codehaus.groovy:groovy-docgenerator') - add('documentation', 'org.codehaus.groovy:groovy-templates') + add('documentation', 'org.apache.groovy:groovy') + add('documentation', 'org.apache.groovy:groovy-groovydoc') + add('documentation', 'org.apache.groovy:groovy-ant') + add('documentation', 'org.apache.groovy:groovy-docgenerator') + add('documentation', 'org.apache.groovy:groovy-templates') } \ No newline at end of file diff --git a/grails-bootstrap/build.gradle b/grails-bootstrap/build.gradle index a068fa14fdb..7d2a532e7ec 100644 --- a/grails-bootstrap/build.gradle +++ b/grails-bootstrap/build.gradle @@ -38,12 +38,10 @@ dependencies { exclude group: 'org.codehaus.groovy' } - // we have to continue to compile with groovy 3 only because of grails-shell - // the grails-shell will run under gradle and thus this must remain compatible - compileOnly "org.codehaus.groovy:groovy:$GroovySystem.version" - compileOnly "org.codehaus.groovy:groovy-templates:$GroovySystem.version" - compileOnly "org.codehaus.groovy:groovy-xml:$GroovySystem.version" - compileOnly "org.codehaus.groovy:groovy-ant:$GroovySystem.version" + compileOnly 'org.apache.groovy:groovy' + compileOnly 'org.apache.groovy:groovy-templates' + compileOnly 'org.apache.groovy:groovy-xml' + compileOnly 'org.apache.groovy:groovy-ant' compileOnly 'io.methvin:directory-watcher' compileOnly 'org.fusesource.jansi:jansi' diff --git a/grails-data-graphql/examples/spring-boot-app/build.gradle b/grails-data-graphql/examples/spring-boot-app/build.gradle index dd4880318a0..8f0c11641a0 100644 --- a/grails-data-graphql/examples/spring-boot-app/build.gradle +++ b/grails-data-graphql/examples/spring-boot-app/build.gradle @@ -22,7 +22,7 @@ buildscript { mavenCentral() } dependencies { - classpath platform("org.apache.grails:grails-bom:$projectVersion") + classpath platform(project(":grails-bom")) classpath("org.springframework.boot:spring-boot-gradle-plugin") } } diff --git a/grails-data-hibernate5/docs/build.gradle b/grails-data-hibernate5/docs/build.gradle index c450f1bdef0..77823b598de 100644 --- a/grails-data-hibernate5/docs/build.gradle +++ b/grails-data-hibernate5/docs/build.gradle @@ -57,16 +57,23 @@ dependencies { .each { documentation project(":$it.name") } } -tasks.named('asciidoctor', AsciidoctorTask) { - inputs.dir layout.projectDirectory.dir('src/docs') - outputs.dir layout.buildDirectory.dir('asciidoc/manual') - baseDirFollowsSourceDir() +tasks.named('asciidoctor', AsciidoctorTask) { AsciidoctorTask it -> + it.inputs.dir layout.projectDirectory.dir('src/docs/asciidoc') + it.outputs.dir layout.buildDirectory.dir('asciidoc/manual') + + it.jvm { + jvmArgs('--add-opens', 'java.base/sun.nio.ch=ALL-UNNAMED', '--add-opens', 'java.base/java.io=ALL-UNNAMED') + } + it.baseDirFollowsSourceDir() + it.sourceDir layout.projectDirectory.dir('src/docs/asciidoc') + it.outputDir = layout.buildDirectory.dir('asciidoc/manual') + resources { - from("$project.projectDir/src/docs/asciidoc/images") + from(project.layout.projectDirectory.dir("src/docs/asciidoc/images")) into './images' } - attributes( + it.attributes = [ 'experimental': 'true', 'compat-mode': 'true', 'toc': 'left', @@ -81,10 +88,7 @@ tasks.named('asciidoctor', AsciidoctorTask) { 'migrationPluginGroupId': rootProject.findProject(':grails-data-hibernate5-dbmigration').group, 'migrationPluginArtifactId': rootProject.findProject(':grails-data-hibernate5-dbmigration').name, 'liquibaseHibernate5Version': liquibaseHibernate5Version - ) - jvm { - jvmArgs('--add-opens', 'java.base/sun.nio.ch=ALL-UNNAMED', '--add-opens', 'java.base/java.io=ALL-UNNAMED') - } + ] } tasks.withType(Groovydoc).configureEach { diff --git a/grails-data-mongodb/docs/build.gradle b/grails-data-mongodb/docs/build.gradle index fb4c01694ad..0db93bfa7ad 100644 --- a/grails-data-mongodb/docs/build.gradle +++ b/grails-data-mongodb/docs/build.gradle @@ -76,15 +76,15 @@ dependencies { tasks.named('asciidoctor', AsciidoctorTask) { AsciidoctorTask it -> dependsOn('resolveMongodbVersion') - inputs.dir project.layout.projectDirectory.dir('src/docs') - outputs.dir layout.buildDirectory.dir('asciidoc/manual') + it.inputs.dir project.layout.projectDirectory.dir('src/docs/asciidoc') + it.outputs.dir layout.buildDirectory.dir('asciidoc/manual') it.jvm { jvmArgs("--add-opens", "java.base/sun.nio.ch=ALL-UNNAMED", "--add-opens", "java.base/java.io=ALL-UNNAMED") } it.baseDirFollowsSourceFile() - it.sourceDir layout.projectDirectory.dir('src/docs') - it.outputDir = layout.buildDirectory.dir('docs') + it.sourceDir layout.projectDirectory.dir('src/docs/asciidoc') + it.outputDir = layout.buildDirectory.dir('asciidoc/manual') it.attributes = [ 'experimental' : 'true', 'compat-mode' : 'true', diff --git a/grails-data-neo4j/grails-plugin/build.gradle b/grails-data-neo4j/grails-plugin/build.gradle index d10891be999..e13975b6748 100644 --- a/grails-data-neo4j/grails-plugin/build.gradle +++ b/grails-data-neo4j/grails-plugin/build.gradle @@ -20,13 +20,6 @@ sourceCompatibility = "1.11" targetCompatibility = "1.11" -dependencyManagement { - imports { - mavenBom "org.apache.grails:grails-bom:$pluginGrailsVersion" - } - applyMavenExclusions false -} - // TODO: Use bom //configurations.configureEach { // exclude group: 'org.apache.grails.data', module: 'grails-data-simple' diff --git a/grails-gradle/build.gradle b/grails-gradle/build.gradle index e5d43712daa..ae155326c49 100644 --- a/grails-gradle/build.gradle +++ b/grails-gradle/build.gradle @@ -31,6 +31,7 @@ allprojects { // mavenLocal() mavenCentral() gradlePluginPortal() + maven { url = 'https://repository.apache.org/content/groups/snapshots' } } props.forEach { k, v -> project.ext.set(k as String, v) } diff --git a/grails-gradle/docs-core/build.gradle b/grails-gradle/docs-core/build.gradle index 8cdc0b481dd..f287c84d2bd 100644 --- a/grails-gradle/docs-core/build.gradle +++ b/grails-gradle/docs-core/build.gradle @@ -85,8 +85,8 @@ tasks.named('jar', Jar).configure { Jar it -> jar.dependsOn docFilesJar apply { - from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') } diff --git a/grails-gradle/gradle/docs-config.gradle b/grails-gradle/gradle/docs-config.gradle index e93d4f21600..ba817669f8f 100644 --- a/grails-gradle/gradle/docs-config.gradle +++ b/grails-gradle/gradle/docs-config.gradle @@ -17,42 +17,61 @@ * under the License. */ -configurations.register('documentation') +configurations.register('documentation') { + canBeConsumed = false + canBeResolved = true + attributes { + attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, Category.LIBRARY)) + attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling, Bundling.EXTERNAL)) + attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, Usage.JAVA_RUNTIME)) + } +} dependencies { add('documentation', platform(project(':grails-gradle-bom'))) add('documentation', 'org.fusesource.jansi:jansi') add('documentation', 'jline:jline') add('documentation', 'com.github.javaparser:javaparser-core') - add('documentation', 'org.codehaus.groovy:groovy') - add('documentation', 'org.codehaus.groovy:groovy-ant') - add('documentation', 'org.codehaus.groovy:groovy-docgenerator') - add('documentation', 'org.codehaus.groovy:groovy-templates') + add('documentation', "org.apache.groovy:groovy:${bomDependencyVersions['groovy.version']}") + add('documentation', "org.apache.groovy:groovy-groovydoc:${bomDependencyVersions['groovy.version']}") + add('documentation', "org.apache.groovy:groovy-ant:${bomDependencyVersions['groovy.version']}") + add('documentation', "org.apache.groovy:groovy-docgenerator:${bomDependencyVersions['groovy.version']}") + add('documentation', "org.apache.groovy:groovy-templates:${bomDependencyVersions['groovy.version']}") } ext { includeInApiDocs = true } -tasks.named('groovydoc', Groovydoc).configure { - classpath = configurations.documentation - groovyClasspath = configurations.documentation - access = GroovydocAccess.PROTECTED - includeAuthor = true - includeMainForScripts = false - processScripts = false - destinationDir = project.file('build/docs/api') +TaskProvider groovydocTask = tasks.named('groovydoc', Groovydoc) +groovydocTask.configure { Groovydoc it -> + it.classpath = configurations.documentation + it.groovyClasspath = configurations.documentation + it.access = GroovydocAccess.PROTECTED + it.includeAuthor = false + it.includeMainForScripts = false + it.processScripts = false + it.noTimestamp = true + it.destinationDir = project.file('build/docs/api') } -tasks.named('javadoc', Javadoc).configure { Javadoc it -> - (it.options as StandardJavadocDocletOptions).with { - encoding = 'UTF-8' - docEncoding = 'UTF-8' - charSet = 'UTF-8' - addStringOption('Xms64M') - addStringOption('Xmx512M') - } +tasks.named('javadoc').configure { + it.enabled = false +} + +tasks.named('javadocJar', Jar).configure { Jar jar -> + jar.reproducibleFileOrder = true + jar.preserveFileTimestamps = false + jar.dirMode = 0755 // To avoid platform specific defaults + jar.fileMode = 0644 // to avoid platform specific defaults + + jar.dependsOn(groovydocTask) + + // Ensure the java source set is included in the groovydoc source set + SourceSetContainer sourceSets = project.extensions.getByType(SourceSetContainer) + groovydocTask.get().source(project.files(sourceSets.main.java.srcDirs)) + + ConfigurableFileCollection groovyDocFiles = project.files(groovydocTask.get().destinationDir) + jar.from(groovyDocFiles) + jar.inputs.files(groovyDocFiles) } -tasks.named('build').configure { - finalizedBy('groovydoc') -} \ No newline at end of file diff --git a/grails-gradle/gradle/java-config.gradle b/grails-gradle/gradle/java-config.gradle index 1df2d2773d8..bc521df6d07 100644 --- a/grails-gradle/gradle/java-config.gradle +++ b/grails-gradle/gradle/java-config.gradle @@ -25,9 +25,17 @@ extensions.configure(JavaPluginExtension) { it.withSourcesJar() } -tasks.withType(Javadoc).configureEach { Javadoc it -> - it.options.noTimestamp true // prevent the file header with the date - it.options.bottom "Generated ${formattedBuildDate} (UTC)" +tasks.named('sourcesJar', Jar).configure { Jar jar -> + SourceSetContainer sourceSets = project.extensions.getByType(JavaPluginExtension).sourceSets + jar.reproducibleFileOrder = true + jar.preserveFileTimestamps = false + jar.dirMode = 0755 // To avoid platform specific defaults + jar.fileMode = 0644 // to avoid platform specific defaults + jar.duplicatesStrategy = DuplicatesStrategy.EXCLUDE + + // don't only include main, but any source set + jar.from sourceSets.collect { it.allSource } + jar.inputs.files(sourceSets.collect { it.allSource }) } // JavaCompile is not configured because we put java files inside of the groovy source sets diff --git a/grails-gradle/model/build.gradle b/grails-gradle/model/build.gradle index c48bd0a379c..3e78ba2eb3a 100644 --- a/grails-gradle/model/build.gradle +++ b/grails-gradle/model/build.gradle @@ -69,8 +69,8 @@ dependencies { } apply { - from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') } diff --git a/grails-gradle/plugins/build.gradle b/grails-gradle/plugins/build.gradle index 64601f54637..958cfe398fe 100644 --- a/grails-gradle/plugins/build.gradle +++ b/grails-gradle/plugins/build.gradle @@ -180,7 +180,7 @@ publishing { } apply { - from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/e2eTest.gradle') } \ No newline at end of file diff --git a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/profiles/GrailsProfileGradlePlugin.groovy b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/profiles/GrailsProfileGradlePlugin.groovy index 87a319987ee..1e5c4c2aee8 100644 --- a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/profiles/GrailsProfileGradlePlugin.groovy +++ b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/profiles/GrailsProfileGradlePlugin.groovy @@ -214,6 +214,8 @@ class GrailsProfileGradlePlugin implements Plugin { jar.from(project.files(project.layout.buildDirectory.dir('resources/profile'), project.layout.buildDirectory.dir('classes/profile'))) jar.destinationDirectory.set(project.layout.buildDirectory.dir('libs')) jar.description = 'Assembles a jar archive containing the profile classes.' + jar.reproducibleFileOrder = true + jar.preserveFileTimestamps = false } TaskProvider sourcesJarTask = project.tasks.register('sourcesProfileJar', Jar) @@ -231,6 +233,8 @@ class GrailsProfileGradlePlugin implements Plugin { jar.archiveClassifier.set('sources') jar.destinationDirectory.set(new File(project.layout.buildDirectory.asFile.get(), 'libs')) jar.description = 'Assembles a jar archive containing the profile sources.' + jar.reproducibleFileOrder = true + jar.preserveFileTimestamps = false jar.group = BUILD_GROUP } @@ -244,6 +248,8 @@ class GrailsProfileGradlePlugin implements Plugin { jar.destinationDirectory.set(new File(project.layout.buildDirectory.asFile.get(), 'libs')) jar.description = 'Assembles a jar archive containing the profile javadoc.' jar.group = BUILD_GROUP + jar.reproducibleFileOrder = true + jar.preserveFileTimestamps = false } project.tasks.named('assemble').configure { Task it ->