All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sbt.internal.librarymanagement.CompatibilityWarning.scala Maven / Gradle / Ivy

package bleep.nosbt.internal.librarymanagement

import bleep.nosbt.librarymanagement.*
import bleep.nosbt.util.{ Level, Logger }

import Configurations.*

final class CompatibilityWarningOptions private[nosbt] (
    val configurations: Seq[Configuration],
    val level: Level.Value
)

object CompatibilityWarningOptions {
  def default: CompatibilityWarningOptions =
    apply(configurations = List(Compile, Runtime), level = Level.Warn)
  def apply(
      configurations: List[Configuration],
      level: Level.Value
  ): CompatibilityWarningOptions =
    new CompatibilityWarningOptions(
      configurations = configurations,
      level = level
    )
}

private[nosbt] object CompatibilityWarning {
  def run(
      config: CompatibilityWarningOptions,
      module: ModuleDescriptor,
      mavenStyle: Boolean,
      log: Logger
  ): Unit = {
    if (mavenStyle) {
      processIntransitive(config, module, log)
    }
  }
  def processIntransitive(
      config: CompatibilityWarningOptions,
      module: ModuleDescriptor,
      log: Logger
  ): Unit = {
    val monitoredConfigsStr: Set[String] = (config.configurations map { _.name }).toSet
    def inMonitoredConfigs(configOpt: Option[String]): Boolean =
      configOpt match {
        case Some(c) => (c.split(",").toSet intersect monitoredConfigsStr).nonEmpty
        case None    => monitoredConfigsStr contains "compile"
      }
    module.directDependencies foreach { m =>
      if (!m.isTransitive && inMonitoredConfigs(m.configurations)) {
        log.warn(
          s"""Found intransitive dependency ($m) while publishMavenStyle is true, but Maven repositories
             |  do not support intransitive dependencies. Use exclusions instead so transitive dependencies
             |  will be correctly excluded in dependent projects.
           """.stripMargin
        )
      } else ()
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy