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

replpp.Dependencies.scala Maven / Gradle / Ivy

The newest version!
package replpp

import replpp.shaded.os
import replpp.util.Cache

import java.net.URI
import java.nio.file.{Path, Paths}
import scala.util.{Failure, Success, Try}

object Dependencies {

  private val CoursierJarDownloadUrl = new URI("https://github.com/coursier/launchers/raw/master/coursier")

  def resolve(coordinates: Seq[String], additionalRepositories: Seq[String] = Nil, verbose: Boolean = false): Try[Seq[Path]] = {
    if (coordinates.isEmpty) {
      Try(Seq.empty)
    } else {
      resolve0(coordinates, additionalRepositories, verbose)
    }
  }

  private def resolve0(coordinates: Seq[String], additionalRepositories: Seq[String], verbose: Boolean): Try[Seq[Path]] = {
    val coursierJarPath = Cache.getOrDownload("coursier.jar", CoursierJarDownloadUrl)
    val repositoryArgs = additionalRepositories.flatMap { repo =>
      Seq("--repository", repo)
    }
    val command = Seq("java", "-jar", util.pathAsString(coursierJarPath), "fetch") ++ repositoryArgs ++ coordinates
    if (verbose) println(s"executing `${command.mkString(" ")}`")

    Try(os.proc(command).call()) match {
      case Success(commandResult) =>
        Success(commandResult.out.text().split(System.lineSeparator()).map(Paths.get(_)).toIndexedSeq)
      case Failure(exception) =>
        Failure(new AssertionError(s"${getClass.getName}: error while invoking `${command.mkString(" ")}`", exception))
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy