次のコードは、Maven メタデータを含む war ファイルを作成します。問題は、何も変更されていない場合、再構築時に必要なほど多くの UP-TO-DATE メッセージが表示されないことです。明らかに、タスクの入力/出力に問題があります。問題は、実際のコードを変更せずに依存関係がどのように変化するかを確認できることです。これにより、実際に再構築を必要とするコードがない場合でも、Maven メタデータが変更されます。これを処理する方法がわからない。私たちの Jar は同じ形式であることに注意してください。つまり、それらも修正する必要があります。
私が見るものの例:
...
: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
...
問題の Gradle コード:
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")
}