'What are sbtconfig.txt and sbtopts used for?
In the 0.13 release of sbt, I saw these two files in sbt/conf directory, it would be really nice if I can change option inside these files instead of the launcher script.
I changed some options in sbtopts, it doesn't take effect at all, and the sbtconfig.txt does work for some options but for this option, -Dinput.encoding=iso-8859-1 (I need this option to use up arrow key to view history, otherwise it shows me messy codes) it only take effect when I add it in the sbt.bat.
Another question is, can I put these two files somewhere in ~/.sbt/ ? I want to store all my sbt configurations in one place.
My OS is Windows 8.1 and working with the SBT 0.13.
Solution 1:[1]
sbtconfig.txt (Windows only) is a configuration file that lists JVM options, and is used by sbt.bat. sbtopts is used by sbt shell script.
It's probably better to read the actual script to understand exactly how's it's used, but eventually the contents would end up in a variable named _JAVA_OPTS and passed into:
"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %*
So you should be able to add -Dinput.encoding=Cp1252 or whatever in there. If that's not working for you, either %JAVA_OPTS% could be non-empty (then sbtconfig.txt is ignored), or %SBT_OPTS% could be overriding the setting to something else? Not sure.
You can check to see if the properties are set or not using sbt console:
scala> sys.props("input.encoding")
res0: String = null
scala> sys.props("file.encoding")
res1: String = UTF-8
Another question is, can I put these two files somewhere in
~/.sbt/?
You should be able to modify the sbt.bat to get that done. In fact looking at sbt shell script, it says it looks at .sbtopts. You can use Cygwin and see if that works.
Solution 2:[2]
$ man sbt
...
Java Options
--java-home <path>
alternate JAVA_HOME
-Dkey=val
pass -Dkey=val directly to the java runtime
-J-X pass option -X directly to the java runtime (-J is stripped)
-S-X add -X to sbt's scalacOptions (-S is stripped)
FILES
~/.sbt
The user configuration directory.
.jvmopts
if this file exists in the current directory, its contents are appended to the JAVA_OPTS.
.sbtopts
if this file exists in the current directory, its contents are prepended to the runner args.
/etc/sbt/sbtopts
if this file exists, it is prepended to the runner args
ENVIRONMENT
JAVA_OPTS
If non-null a set of arguments passed to java.
SBT_OPTS
environment variable, if unset uses "-Dfile.encoding=UTF-8".
NOTES
In the case of duplicated or conflicting options, the order above shows precedence: JAVA_OPTS lowest, command line options high-
est.
...
Examples:
$ pwd
/tmp/helo
$ cat .sbtopts
-Dinput.encoding=iso-8859-1
$ cat .jvmopts
-Xms512m
$ sbt -v console
[sbt_options] declare -a sbt_options=()
[process_args] java_version = '8'
# Executing command line:
java
-Xms512m
-Dinput.encoding=iso-8859-1
-Dsbt.script=/usr/bin/sbt
-jar
/home/hadoop/.cache/sbt/boot/sbt-launch/1.6.2/sbt-launch-1.6.2.jar
console
[info] welcome to sbt 1.6.2 (Debian Java 1.8.0_312)
[info] loading settings for project helo-build from site.sbt ...
[info] loading project definition from /tmp/helo/project
[info] loading settings for project helo from build.sbt ...
[info] set current project to helo (in build file:/tmp/helo/)
[info] Starting scala interpreter...
Welcome to Scala 2.12.15 (OpenJDK 64-Bit Server VM, Java 1.8.0_312).
Type in expressions for evaluation. Or try :help.
scala> sys.props("input.encoding")
res1: String = iso-8859-1
scala> :q
[success] Total time: 51 s, completed Apr 29, 2022 2:26:53 PM
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Eugene Yokota |
| Solution 2 |
