Skip to content

Commit

Permalink
Merge pull request #139 from nebula-plugins/fix-maven-publication-no-…
Browse files Browse the repository at this point in the history
…version

Introduce MavenRemoveInvalidDependenciesPlugin to remove dependencies without versions
  • Loading branch information
rpalcolea authored Jul 17, 2019
2 parents d4e2b27 + 742dc19 commit 908107d
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package nebula.plugin.publishing.maven

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.XmlProvider
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.publish.maven.MavenPublication

class MavenRemoveInvalidDependenciesPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.afterEvaluate {
project.publishing {
publications {
withType(MavenPublication) {
pom.withXml { XmlProvider xml ->
project.plugins.withType(JavaBasePlugin) {
def dependencies = xml.asNode()?.dependencies?.dependency
dependencies?.each { Node dep ->
String version = dep.version.text()
if(!version) {
dep.parent().remove(dep)
}

}
}
}
}
}
}
}
}
}


Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package nebula.plugin.publishing.maven


import nebula.test.IntegrationSpec
import nebula.test.dependencies.DependencyGraphBuilder
import nebula.test.dependencies.GradleDependencyGenerator

class MavenRemoveInvalidDependendenciesPluginSpec extends IntegrationSpec {
File publishDir

def setup() {
settingsFile << '''\
rootProject.name = 'resolvedmaventest'
'''.stripIndent()

publishDir = new File(projectDir, 'testrepo/test/nebula/resolvedmaventest/0.1.0')
}

def 'publishes maven descriptor without platform dependency'() {
buildFile << """\
${applyPlugin(MavenResolvedDependenciesPlugin)}
${applyPlugin(MavenNebulaPublishPlugin)}
${applyPlugin(MavenRemoveInvalidDependenciesPlugin)}
version = '0.1.0'
group = 'test.nebula'
publishing {
repositories {
maven {
name = 'testLocal'
url = 'testrepo'
}
}
}
""".stripIndent()


def graph = new DependencyGraphBuilder().addModule('test.resolved:a:1.0.0')
.addModule('test.resolved:a:1.1.0')
.addModule('test.resolved:b:1.1.0').build()
File mavenrepo = new GradleDependencyGenerator(graph, "${projectDir}/testrepogen").generateTestMavenRepo()

buildFile << """\
apply plugin: 'java'
repositories { maven { url '${mavenrepo.absolutePath}' } }
dependencies {
implementation 'test.resolved:a'
implementation 'test.resolved:b:1.+'
modules {
module("test.resolved:a") {
replacedBy("test.resolved:b", "b is better")
}
}
}
""".stripIndent()

when:
runTasks('publishNebulaPublicationToTestLocalRepository')

then:
def a = findDependency('a')
!a

def b = findDependency('b')
b.version == '1.1.0'
}

def findDependency(String artifactId) {
def root = new XmlSlurper().parseText(new File(publishDir, 'resolvedmaventest-0.1.0.pom').text)
def d = root.dependencies.dependency.find {
it.artifactId == artifactId
}
return d
}

}

0 comments on commit 908107d

Please sign in to comment.