Accessing Source File Paths
Source Names and Paths
System properties provide source file paths, separated by java.io.File.pathSeparator
.
scala.source.names
filenames without a path.scala.sources
full paths to source files
System property scala.source.names
This simple script reports the script file name:
val name = sys.props("scala.source.names")
println(s"scriptName: $name")
scala-cli reportNames.sc
# scriptName: reportNames.sc
Likewise, for this .scala
program:
object Main {
def main(args: Array[String]): Unit =
val names = sys.props("scala.source.names")
println(names)
}
scala-cli SourceNames.scala
# SourceNames.scala
This java program prints a comma-separated list of source names:
public class NamesLister {
public static void main(String[] args) {
String sourceNames = System.getProperty("scala.source.names");
String[] names = sourceNames.split(java.io.File.pathSeparator);
String list = String.join(",", names);
System.out.printf("%s\n", list);
}
}
scala-cli NamesLister.java
# NamesLister.java
If multiple sources are provided, all are displayed:
scala-cli NamesLister.java reportNames.sc SourceNames.scala --main-class NamesLister
# NamesLister.java,reportNames.sc,SourceNames.scala
System property scala.sources
public class PathsLister {
public static void main(String[] args) {
String paths = System.getProperty("scala.sources");
String list = String.join(",", paths.split(java.io.File.pathSeparator));
System.out.printf("%s\n", list);
}
}
The property "scala.sources" displays full source file paths:
scala-cli PathsLister.java reportNames.sc SourceNames.scala --main-class PathsLister
# /tmp/workdir/PathsLister.java,/tmp/workdir/reportNames.sc,/tmp/workdir/SourceNames.scala
Other examples
When multiple .md
files with plain scala
snippets are being run, names and paths can refer to '.md' files:
# Main class A
```scala
println(s"A: ${sys.props("scala.source.names")}")
```
# Main class 2
```scala
println(s"2: ${sys.props("scala.source.names")}")
```
When multiple such sources are passed as inputs, the main class has to be passed explicitly with the --main-class
option.
scala-cli --power MainA.md MainB.md --main-class MainA_md
# A: MainA.md:MainB.md
1: MainA.md:MainB.md