From ef2798aa2a723fdcf3c19d85a5df47f1ebc3918e Mon Sep 17 00:00:00 2001 From: Maxim Bublis Date: Thu, 23 Dec 2021 16:55:18 +0000 Subject: [PATCH] Fix locating artifacts published locally. When using `sbt-explicit-dependencies` with SBT 1.4+, if the build depends on a local artifact (e.g. published locally with `sbt publishLocal`), then the task reports dependency as unused. Substituting `${IVY_HOME}` fixes this behaviour. --- src/main/scala-sbt-0.13/explicitdeps/package.scala | 3 ++- src/main/scala-sbt-1.0/explicitdeps/package.scala | 10 +++++----- src/main/scala/explicitdeps/ExplicitDepsPlugin.scala | 6 ++++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/scala-sbt-0.13/explicitdeps/package.scala b/src/main/scala-sbt-0.13/explicitdeps/package.scala index 5808073..79b6e83 100644 --- a/src/main/scala-sbt-0.13/explicitdeps/package.scala +++ b/src/main/scala-sbt-0.13/explicitdeps/package.scala @@ -8,7 +8,8 @@ package object explicitdeps { val defaultModuleFilter: ModuleFilter = sbt.DependencyFilter.moduleFilter() // csrCacheDirectoryValueOpt, baseDirectoryValue are unused and are only present for forward compatibility - def getAllLibraryDeps(analysis: Analysis, log: sbt.util.Logger)(csrCacheDirectoryValueOpt: Option[String], baseDirectoryValue: String): Set[java.io.File] = { + def getAllLibraryDeps(analysis: Analysis, log: sbt.util.Logger) + (csrCacheDirectoryValueOpt: Option[String], baseDirectoryValue: String, ivyHomeValue: String): Set[java.io.File] = { log.debug( s"Source to library relations:\n${analysis.relations.binaryDep.all.map(r => s" ${r._1} -> ${r._2}").mkString("\n")}" ) diff --git a/src/main/scala-sbt-1.0/explicitdeps/package.scala b/src/main/scala-sbt-1.0/explicitdeps/package.scala index 11a8434..ca6b828 100644 --- a/src/main/scala-sbt-1.0/explicitdeps/package.scala +++ b/src/main/scala-sbt-1.0/explicitdeps/package.scala @@ -7,12 +7,13 @@ package object explicitdeps { val defaultModuleFilter: ModuleFilter = sbt.librarymanagement.DependencyFilter.moduleFilter() - private def toFile(x: AnyRef, csrCacheDirectoryValueOpt: Option[String], baseDirectoryValue: String): java.io.File = { + private def toFile(x: AnyRef, csrCacheDirectoryValueOpt: Option[String], baseDirectoryValue: String, ivyHomeValue: String): java.io.File = { if (x.getClass.getSimpleName.contains("VirtualFile")) { // sbt 1.4.0 or newer val id = x.getClass.getMethod("id").invoke(x).toString val path = id .replaceAllLiterally("${CSR_CACHE}", csrCacheDirectoryValueOpt.mkString) + .replaceAllLiterally("${IVY_HOME}", ivyHomeValue) .replaceAllLiterally("${BASE}", baseDirectoryValue) new java.io.File(path) } else { @@ -22,14 +23,13 @@ package object explicitdeps { } def getAllLibraryDeps(analysis: Analysis, log: sbt.util.Logger) - (csrCacheDirectoryValueOpt: Option[String], baseDirectoryValue: String): Set[java.io.File] = { + (csrCacheDirectoryValueOpt: Option[String], baseDirectoryValue: String, ivyHomeValue: String): Set[java.io.File] = { log.debug( s"Source to library relations:\n${analysis.relations.libraryDep.all.map(r => s" ${r._1} -> ${r._2}").mkString("\n")}" ) - log.debug(s"Using CSR_CACHE=${csrCacheDirectoryValueOpt.mkString} BASE=$baseDirectoryValue") + log.debug(s"Using CSR_CACHE=${csrCacheDirectoryValueOpt.mkString} BASE=$baseDirectoryValue IVY_HOME=$ivyHomeValue") val allLibraryDeps = analysis.relations.allLibraryDeps.asInstanceOf[Set[AnyRef]] - .map(x => toFile(x, csrCacheDirectoryValueOpt, baseDirectoryValue)) - .toSet + .map(x => toFile(x, csrCacheDirectoryValueOpt, baseDirectoryValue, ivyHomeValue)) log.debug(s"Library dependencies:\n${allLibraryDeps.mkString(" ", "\n ", "")}") allLibraryDeps } diff --git a/src/main/scala/explicitdeps/ExplicitDepsPlugin.scala b/src/main/scala/explicitdeps/ExplicitDepsPlugin.scala index 3ed2150..384874c 100644 --- a/src/main/scala/explicitdeps/ExplicitDepsPlugin.scala +++ b/src/main/scala/explicitdeps/ExplicitDepsPlugin.scala @@ -52,7 +52,8 @@ object ExplicitDepsPlugin extends AutoPlugin { val projectName = name.value val csrCacheDirectoryValueOpt = csrCacheDirectoryValueTask.value val baseDirectoryValue = appConfiguration.value.baseDirectory().getCanonicalFile.toPath.toString - val allLibraryDeps = getAllLibraryDeps(compile.in(Compile).value.asInstanceOf[Analysis], log)(csrCacheDirectoryValueOpt, baseDirectoryValue) + val ivyHomeValue = appConfiguration.value.provider.scalaProvider.launcher.ivyHome.toString + val allLibraryDeps = getAllLibraryDeps(compile.in(Compile).value.asInstanceOf[Analysis], log)(csrCacheDirectoryValueOpt, baseDirectoryValue, ivyHomeValue) val libraryDeps = libraryDependencies.value val scalaBinaryVer = scalaBinaryVersion.value val scalaFullVer = scalaVersion.value @@ -79,7 +80,8 @@ object ExplicitDepsPlugin extends AutoPlugin { val projectName = name.value val csrCacheDirectoryValueOpt = csrCacheDirectoryValueTask.value val baseDirectoryValue = appConfiguration.value.baseDirectory().getCanonicalFile.toPath.toString - val allLibraryDeps = getAllLibraryDeps(compile.in(Compile).value.asInstanceOf[Analysis], log)(csrCacheDirectoryValueOpt, baseDirectoryValue) + val ivyHomeValue = appConfiguration.value.provider.scalaProvider.launcher.ivyHome.toString + val allLibraryDeps = getAllLibraryDeps(compile.in(Compile).value.asInstanceOf[Analysis], log)(csrCacheDirectoryValueOpt, baseDirectoryValue, ivyHomeValue) val libraryDeps = libraryDependencies.value val scalaBinaryVer = scalaBinaryVersion.value val scalaFullVer = scalaVersion.value