0

The following code creates a war file with Maven metadata. Problem is that I don't see nearly as many UP-TO-DATE messages as I should on a rebuild when nothing changes. Clearly I've got something wrong with my task inputs/outputs. Problem is that I can see how the dependencies might change without any actual code changing. That would cause the Maven metadata to change when none of the code actually does necessitating a rebuild. Not sure how to handle this. Note that our Jar's are of the same format, which means I have to fix them too.

Example of what I see:

...
:redacted:redacted-redacted:com-redacted:processResources UP-TO-DATE
:redacted:redacted-redacted:com-redacted:classes
:redacted:redacted-redacted:com-redacted:generatePomFileForMavenJavaPublication
:redacted:redacted-redacted:com-redacted:jar
:redacted:redacted-redacted:redacted:compileJava
:redacted:redacted-redacted:redacted:processResources UP-TO-DATE
:redacted:redacted-redacted:redacted:classes
:redacted:redacted-redacted:redacted:generatePomFileForMavenJavaPublication
:redacted:redacted-redacted:redacted:jar
:redacted:redacted-redacted:com-redacted:compileJava
:redacted:redacted-redacted:com-redacted:processResources UP-TO-DATE
:redacted:redacted-redacted:com-redacted:classes
:redacted:redacted-redacted:com-redacted:generatePomFileForMavenJavaPublication
:redacted:redacted-redacted:com-redacted:jar
:redacted:redacted-redacted:com-redacted:compileJava
:redacted:redacted-redacted:com-redacted:processResources UP-TO-DATE
:redacted:redacted-redacted:com-redacted:classes
:redacted:redacted-redacted:com-redacted:generatePomFileForMavenJavaPublication
:redacted:redacted-redacted:com-redacted:jar
:redacted:userdata-redacted:com-redacted:compileJava
:redacted:userdata-redacted:com-redacted:processResources UP-TO-DATE
:redacted:userdata-redacted:com-redacted:classes
:redacted:userdata-redacted:com-redacted:generatePomFileForMavenJavaPublication
:redacted:userdata-redacted:com-redacted:jar
:redacted:redacted-redacted:com-redacted:compileJava
:redacted:redacted-redacted:com-redacted:processResources UP-TO-DATE
:redacted:redacted-redacted:com-redacted:classes
:redacted:redacted-redacted:com-redacted:generatePomFileForMavenJavaPublication
:redacted:redacted-redacted:com-redacted:jar
:redacted:redacted-redacted:redactedservices:compileJava
:redacted:redacted-redacted:redactedservices:processResources
:redacted:redacted-redacted:redactedservices:classes
:redacted:redacted-redacted:redactedservices:generatePomFileForMavenJavaPublication
:redacted:redacted-redacted:redactedservices:war
...

The Gradle code in question:

apply plugin: 'war'
apply plugin: 'maven-publish'

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}

publishing {
    repositories {
        maven {
            url "$buildDir/fauxMvnRepo"
        }
    }
}

war {

    def pomGenerationTask = project.tasks.findByName('generatePomFileForMavenJavaPublication')

    if (pomGenerationTask) {
        dependsOn 'generatePomFileForMavenJavaPublication'
        pomGenerationTask.doLast {
            createPropertiesFile()
        }

    } else {
        project.tasks.whenTaskAdded { addedTask ->
            if (addedTask.name == 'generatePomFileForMavenJavaPublication') {
                project.tasks.war.dependsOn 'generatePomFileForMavenJavaPublication'
                addedTask.doLast {
                    createPropertiesFile()
                }
            }
        }
    }

    into("META-INF/maven/$project.group/$project.archivesBaseName") {
        from new File(project.buildDir, 'publications/mavenJava')
        rename "pom-default.xml", "pom.xml"

    }

    manifest {
        attributes('Implementation-Title': project.name,
                'Implementation-Version': project.version,
                'Archiver-Version': "Gradle ${name} task",
                'Built-By': System.getProperty('user.name'),
                'Built-JDK': System.getProperty('java.version'),
                'Created-By': "Gradle",
                'Source-Compatibility': project.sourceCompatibility,
                'Target-Compatibility': project.targetCompatibility,
                'Implementation-Vendor-Id': "com.funkyChicken"
        )
    }

    doLast {
        copy {
            from destinationDir.absolutePath + File.separator + "$archiveName"
            into destinationDir
            rename { String fileName ->
                fileName.replace("${archiveName}", "${baseName}.${extension}")
            }
        }
    }
}

def createPropertiesFile() {
    File propsFile = new File("$buildDir/publications/mavenJava/pom.properties")

    def props = new Properties()
    propsFile.createNewFile()

    props.setProperty("version","$version")
    props.setProperty("groupId","$project.group")
    props.setProperty("artifactId","$project.archivesBaseName")

    props.store(propsFile.newWriter(), "#Generated by Gradle")
}
user447607
  • 5,149
  • 13
  • 33
  • 55

0 Answers0