blob: a98c9fd6eb3010faea86f77c92a0af14bc48f4f7 [file] [log] [blame]
import org.custommonkey.xmlunit.Diff
import org.custommonkey.xmlunit.DetailedDiff
import org.custommonkey.xmlunit.ElementNameAndAttributeQualifier
import org.custommonkey.xmlunit.XMLAssert
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'xmlunit:xmlunit:1.3'
}
}
apply plugin: 'maven'
apply from: 'gradle/pomconfigurer.gradle'
configurations {
deployerJars
}
dependencies {
deployerJars "org.apache.maven.wagon:wagon-webdav:1.0-beta-2"
}
task generatePoms {
pom = pom()
pom.scopeMappings.addMapping(10, configurations.groovy, 'compile')
pomAll = pom()
[pomAll, pom]*.whenConfigured {pom ->
pom.dependencies.find {dep -> dep.artifactId == 'livetribe-jsr223' }.scope = 'provided'
pom.dependencies.find {dep -> dep.artifactId == 'ivy' }.addExclusion(new org.apache.maven.model.Exclusion(groupId: '*', artifactId: '*'))
pom.dependencies.each { dep -> dep.optional = dep.scope == 'test' ? false : true }
}
pomAll.whenConfigured {pom ->
pom.artifactId = 'groovy-all'
pom.dependencies.remove(pom.dependencies.find {dep -> dep.artifactId == 'commons-cli'})
}
def groovyConfDeps = configurations.groovy.dependencies.collect { dep -> dep.name }
pom.whenConfigured {pom ->
pom.dependencies.each { dep -> if (groovyConfDeps.contains(dep.artifactId)) { dep.optional = false }}
}
pomFile = "$buildDir/generatedPoms/groovy.pom" as File
pomAllFile = "$buildDir/generatedPoms/groovy-all.pom" as File
doFirst {
configure(pom, pomConfigureClosure)
configure(pomAll, pomConfigureClosure)
pom.writeTo(pomFile)
pomAll.writeTo(pomAllFile)
}
}
def artifact = groovy.xml.NamespaceBuilder.newInstance(ant, 'antlib:org.apache.maven.artifact.ant')
task mavenInstall(dependsOn: [generatePoms, jar, jarAll]) {
inputs.files generatePoms.pomFile, generatePoms.pomAllFile, jar.archivePath, jarAll.archivePath
doFirst {
[(jar): generatePoms.pomFile, (jarAll):generatePoms.pomAllFile].each {jar, pomFile ->
println pomFile
artifact.install(file: jar.archivePath) {
pom(file: pomFile)
}
}
}
}
task mavenDeploy(dependsOn: [generatePoms, jar, jarAll]) << {
[(jar): generatePoms.pomFile, (jarAll):generatePoms.pomAllFile].each {jar, pomFile ->
// todo Once we have better classpath isolation and/or we have migrated to Maven 3 we don't need to execute the below with the IsolatedAntBuilder
def antBuilderClasspath = ["${gradle.gradleHomeDir}/lib/maven-ant-tasks-2.1.0.jar" as File] + services.get(org.gradle.api.internal.ClassPathRegistry).getClassPathFiles('ANT') +
services.get(org.gradle.api.internal.ClassPathRegistry).getClassPathFiles('LOCAL_GROOVY') + configurations.deployerJars.files
def isolatedAnt = services.get(org.gradle.api.internal.project.IsolatedAntBuilder)
isolatedAnt.execute(antBuilderClasspath) {
'antlib:org.apache.maven.artifact.ant:deploy'(file: jar.archivePath) {
pom(file: pomFile)
}
}
}
}
task comparePoms << {
println 'Compare groovy.pom:'
comparePoms("pom.xml", "target/generatedPoms/groovy.pom")
println 'Compare groovy-all.pom:'
comparePoms("target/groovy-all.pom", "target/generatedPoms/groovy-all.pom")
// Diff diff = new Diff(file("target/groovy-all.pom").text, file("target/generatedPom/groovy-all.pom").text)
// diff.overrideElementQualifier(new ElementNameAndAttributeQualifier())
// DetailedDiff ddiff = new DetailedDiff(diff)
// XMLAssert.assertXMLEqual(ddiff, true);
}
def comparePoms(def antPom, def gradlePom) {
Set antDependencies = getDependencies(antPom)
Set gradleDependencies = getDependencies(gradlePom)
Set commonDependencies = antDependencies.intersect(gradleDependencies)
Set antOnly = antDependencies - commonDependencies
Set gradleOnly = gradleDependencies - commonDependencies
if (antOnly) {
println "Dependency only in Ant Pom: " + antOnly
}
if (gradleOnly) {
println "Dependency only in Gradle Pom: " + gradleOnly
}
}
def getDependencies(def pomFile) {
def project = new XmlParser().parse(pomFile as File)
Set dependencies = []
project.dependencies.dependency.each {dependency ->
def optional = dependency.optional?.text() ? 'optional' : 'non-optional'
String exclusions = 'exclusions:'
dependency.exclusions?.exclusion.each { exclusion ->
exclusions += "${exclusion.groupId.text()}:${exclusion.artifactId.text()}"
}
dependencies.add("${dependency.groupId.text()}:${dependency.artifactId.text()}:${dependency.version.text()}:$optional:$exclusions:${dependency.scope.text()}")
}
return dependencies
}