Merge pull request #2127 from sbt/wip/warn-on-intransitive-pom

Add warning to MakePom for intransitive dependencies.
This commit is contained in:
Josh Suereth 2015-07-25 08:23:09 -04:00
commit abb4682cc7
1 changed files with 23 additions and 14 deletions

View File

@ -236,21 +236,30 @@ class MakePom(val log: Logger) {
def makeDependency(dependency: DependencyDescriptor, includeTypes: Set[String]): NodeSeq = def makeDependency(dependency: DependencyDescriptor, includeTypes: Set[String]): NodeSeq =
makeDependency(dependency, includeTypes, Nil) makeDependency(dependency, includeTypes, Nil)
def makeDependency(dependency: DependencyDescriptor, includeTypes: Set[String], excludes: Seq[ExcludeRule]): NodeSeq = def makeDependency(dependency: DependencyDescriptor, includeTypes: Set[String], excludes: Seq[ExcludeRule]): NodeSeq = {
{ def warnIntransitve(): Unit =
val artifacts = dependency.getAllDependencyArtifacts if (!dependency.isTransitive)
val includeArtifacts = artifacts.filter(d => includeTypes(d.getType)) log.warn(
if (artifacts.isEmpty) { s"""Translating intransitive dependency (${dependency.getDependencyId}) into pom.xml, but maven does not support intransitive dependencies.
val configs = dependency.getModuleConfigurations | Please use exclusions instead so transitive dependencies will be correctly excluded in dependent projects.
if (configs.filterNot(Set("sources", "docs")).nonEmpty) { """.stripMargin)
val (scope, optional) = getScopeAndOptional(dependency.getModuleConfigurations) else ()
makeDependencyElem(dependency, scope, optional, None, None, excludes) val artifacts = dependency.getAllDependencyArtifacts
} else NodeSeq.Empty val includeArtifacts = artifacts.filter(d => includeTypes(d.getType))
} else if (includeArtifacts.isEmpty) if (artifacts.isEmpty) {
NodeSeq.Empty val configs = dependency.getModuleConfigurations
else if (configs.filterNot(Set("sources", "docs")).nonEmpty) {
NodeSeq.fromSeq(artifacts.flatMap(a => makeDependencyElem(dependency, a, excludes))) warnIntransitve()
val (scope, optional) = getScopeAndOptional(dependency.getModuleConfigurations)
makeDependencyElem(dependency, scope, optional, None, None, excludes)
} else NodeSeq.Empty
} else if (includeArtifacts.isEmpty) {
NodeSeq.Empty
} else {
warnIntransitve()
NodeSeq.fromSeq(artifacts.flatMap(a => makeDependencyElem(dependency, a, excludes)))
} }
}
@deprecated("Use `makeDependencyElem` variant which takes excludes", "0.13.9") @deprecated("Use `makeDependencyElem` variant which takes excludes", "0.13.9")
def makeDependencyElem(dependency: DependencyDescriptor, artifact: DependencyArtifactDescriptor): Option[Elem] = def makeDependencyElem(dependency: DependencyDescriptor, artifact: DependencyArtifactDescriptor): Option[Elem] =