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")
}