scala-cli icon indicating copy to clipboard operation
scala-cli copied to clipboard

Expose fully-fledged Coursier as a subcommand

Open keynmol opened this issue 2 years ago • 6 comments

Scala CLI already embeds a non-trivial portion of Coursier for its dependency resolution needs.

I propose exposing scala coursier as a separate command with subcommands such as (but not limited to)

  1. launch
  2. resolve
  3. fetch
  4. bootstrap

to provide immediate access to the full ecosystem of packages, coursier channels, etc.

Currently coursier is in a weird place – it's the de facto dependency resolution mechanism for both SBT and Mill, it is the official way of installing Scala, it is used to resolve and bootstrap CLIs, it has incredibly helpful poweruser functions to fetch classpaths and resolve dependency trees.

And yet:

  • it's hosted in a separate organisation, not affiliated with either Scala Center, VirtusLab, Lightbend, or EPFL
  • it requires separate installation
  • it's not available in official package managers in Windows and in some Linux distributions

With Scala CLI being the official launcher (and hopefully at some point being simply a apt install scala away...), I believe requiring a separate installation of coursier to get access to same functionality is unnecessary.

Workaround for the impatient:

$ scala-cli run --dep io.get-coursier:coursier-cli_2.12:2.1.5 --scala-snippet 'object A' -S 2.12 -M coursier.cli.Coursier -- java --available
...
adoptium:1.11.0.15
adoptium:1.11.0.16
adoptium:1.11.0.16.1
adoptium:1.11.0.17
adoptium:1.11.0.18
adoptium:1.11.0.19
adoptium:1.17
adoptium:1.17.0.1
adoptium:1.17.0.2
adoptium:1.17.0.3

keynmol avatar May 30 '23 17:05 keynmol

See also:

  • https://github.com/VirtusLab/scala-cli/issues/2047

armanbilge avatar May 30 '23 17:05 armanbilge

Related to this issue: https://users.scala-lang.org/t/streamlining-the-scala-installation-procedure/9313

diesalbla avatar Jun 01 '23 10:06 diesalbla

I'm in general agreement with Anton here about the advisability of coursier continuing to be its own command-line thing and its own package manager. I posted similar thoughts at https://contributors.scala-lang.org/t/sip-46-scala-cli-as-default-scala-command/5996/64

SethTisue avatar Jun 02 '23 14:06 SethTisue

I think we could include some of the commands such as launch, but I would not opt to do add everything that coursier does as I am not sure if we could provide a sensible level of support here.

tgodzik avatar Jun 21 '23 15:06 tgodzik

I can just say that installing more things on some corporate networks is next to impossible so anything to simplify and have official "signed" launchers/installers is highly desired.

ekrich avatar Jul 28 '23 18:07 ekrich

I would also love to see one feature to setup the JDK using Scala-CLI alone. May be as a power flag or a sub-command or any other way. Right now, I promote cs to a lot of my colleagues and friends to manage JDKs. I also tries to promote scala-cli. So thought, it might make it easier if we can do the JDK explicit setup using Scala-CLI itself instead of separate cs install.

yadavan88 avatar Mar 17 '24 20:03 yadavan88