VirtusLab / scala-cli

Scala CLI is a command-line tool to interact with the Scala language. It lets you compile, run, test, and package your Scala code (and more!)
https://scala-cli.virtuslab.org
Apache License 2.0
550 stars 129 forks source link

Passing the Java property into Scala CLI should also pass it into BSP #2019

Closed lwronski closed 1 month ago

lwronski commented 1 year ago

Version(s) 0.2.1

Describe the bug Passing the Java property into Scala CLI should also pass it into BSP.

To Reproduce First run of Scala CLI should create a BSP setup in which -Dfoo=bar properties are also set as Java properties for the Scala CLI BSP command.

scala-cli -Dfoo=bar run .

so it should create scala-cli.json with the following content:

{
  "name": "scala-cli",
  "argv": [
    "/usr/local/bin/scala-cli",
    "-Dfoo=bar",
    "bsp",
    "--json-options",
    "/private/tmp/scala-demo/.scala-build/ide-options-v2.json",
    "/private/tmp/scala-demo"
  ],
  "version": "0.2.1",
  "bspVersion": "2.1.0-M3",
  "languages": [
    "scala",
    "java"
  ]

Expected behaviour It should also work with the setup-ide command.

przemek-pokrywka commented 1 year ago

First run of Scala CLI should

what about the second and subsequent runs?

If we only support the first run, then we will run into bad DX in the following scenario:

  1. user starts to play with the first version of their script: scala-cli run ., the scala-cli.json gets generated
  2. user recognizes, that they want to add a critical JVM property (for example: -Djavax.net.ssl.trustStore=mycompanycerts in order for scala-cli to be able to fetch some dependencies from their company-internal Nexus repository)
  3. does scala-cli.json stay as it was? Because if it does, then the instance of scala-cli is unable to fetch the required dependencies because of a javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target exception (caused by the lack of the required certificate from the default cacerts/truststore file). Should the user be forced to search the web for a solution and then to update the scala-cli.json file by hand?