|
@@ -270,7 +270,7 @@ class BuildPlugin implements Plugin<Project> {
|
|
|
|
|
|
// add exclusions to the pom directly, for each of the transitive deps of this project's deps
|
|
|
project.modifyPom { MavenPom pom ->
|
|
|
- pom.withXml(removeTransitiveDependencies(project))
|
|
|
+ pom.withXml(fixupDependencies(project))
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -299,9 +299,16 @@ class BuildPlugin implements Plugin<Project> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /** Returns a closure which can be used with a MavenPom for removing transitive dependencies. */
|
|
|
- private static Closure removeTransitiveDependencies(Project project) {
|
|
|
- // TODO: remove this when enforcing gradle 2.13+, it now properly handles exclusions
|
|
|
+ /**
|
|
|
+ * Returns a closure which can be used with a MavenPom for fixing problems with gradle generated poms.
|
|
|
+ *
|
|
|
+ * <ul>
|
|
|
+ * <li>Remove transitive dependencies (using wildcard exclusions, fixed in gradle 2.14)</li>
|
|
|
+ * <li>Set compile time deps back to compile from runtime (known issue with maven-publish plugin)
|
|
|
+ * </ul>
|
|
|
+ */
|
|
|
+ private static Closure fixupDependencies(Project project) {
|
|
|
+ // TODO: remove this when enforcing gradle 2.14+, it now properly handles exclusions
|
|
|
return { XmlProvider xml ->
|
|
|
// first find if we have dependencies at all, and grab the node
|
|
|
NodeList depsNodes = xml.asNode().get('dependencies')
|
|
@@ -315,6 +322,15 @@ class BuildPlugin implements Plugin<Project> {
|
|
|
String artifactId = depNode.get('artifactId').get(0).text()
|
|
|
String version = depNode.get('version').get(0).text()
|
|
|
|
|
|
+ // fix deps incorrectly marked as runtime back to compile time deps
|
|
|
+ // see https://discuss.gradle.org/t/maven-publish-plugin-generated-pom-making-dependency-scope-runtime/7494/4
|
|
|
+ boolean isCompileDep = project.configurations.compile.allDependencies.find { dep ->
|
|
|
+ dep.name == depNode.artifactId.text()
|
|
|
+ }
|
|
|
+ if (depNode.scope.text() == 'runtime' && isCompileDep) {
|
|
|
+ depNode.scope*.value = 'compile'
|
|
|
+ }
|
|
|
+
|
|
|
// collect the transitive deps now that we know what this dependency is
|
|
|
String depConfig = transitiveDepConfigName(groupId, artifactId, version)
|
|
|
Configuration configuration = project.configurations.findByName(depConfig)
|
|
@@ -327,17 +343,10 @@ class BuildPlugin implements Plugin<Project> {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- // we now know we have something to exclude, so add the exclusion elements
|
|
|
- Node exclusions = depNode.appendNode('exclusions')
|
|
|
- for (ResolvedArtifact transitiveArtifact : artifacts) {
|
|
|
- ModuleVersionIdentifier transitiveDep = transitiveArtifact.moduleVersion.id
|
|
|
- if (transitiveDep.group == groupId && transitiveDep.name == artifactId) {
|
|
|
- continue; // don't exclude the dependency itself!
|
|
|
- }
|
|
|
- Node exclusion = exclusions.appendNode('exclusion')
|
|
|
- exclusion.appendNode('groupId', transitiveDep.group)
|
|
|
- exclusion.appendNode('artifactId', transitiveDep.name)
|
|
|
- }
|
|
|
+ // we now know we have something to exclude, so add a wildcard exclusion element
|
|
|
+ Node exclusion = depNode.appendNode('exclusions').appendNode('exclusion')
|
|
|
+ exclusion.appendNode('groupId', '*')
|
|
|
+ exclusion.appendNode('artifactId', '*')
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -349,7 +358,7 @@ class BuildPlugin implements Plugin<Project> {
|
|
|
publications {
|
|
|
all { MavenPublication publication -> // we only deal with maven
|
|
|
// add exclusions to the pom directly, for each of the transitive deps of this project's deps
|
|
|
- publication.pom.withXml(removeTransitiveDependencies(project))
|
|
|
+ publication.pom.withXml(fixupDependencies(project))
|
|
|
}
|
|
|
}
|
|
|
}
|