Hi,
I am new to nixpkgs trying to install scala. though it is installed successfully scala is still using “OpenJDK 64-Bit Server VM, Java 1.8.0_202”. I want it to use latest jdk/jre, either 11 or 13 with scala.
I tried searching for a solution but didnt get anything that would work.
my config is
{pkgs, ...}:
{
allowUnfree = true;
packageOverrides = pkgs: with pkgs; {
sysPackages = pkgs.buildEnv {
name = "syspackages";
paths = [
scala
]; };};}
could someone please help fix this.
thanks for your help 
You can override the JRE with: (pkgs.scala.override { jre = pkgs.jdk11; })
The way to find out about this is by looking at the nixpkgs repository: https://github.com/NixOS/nixpkgs/blob/61335d51ace64fa75daa14c58768945af255d997/pkgs/top-level/all-packages.nix#L9208 shows you that ‘scala’ is defined in nixpkgs/2.13.nix at 61335d51ace64fa75daa14c58768945af255d997 · NixOS/nixpkgs · GitHub, and the first line of that file shows you can override the jre
dependency.
Of course I don’t know what you’re planning to use scala for, but usually I would recommend not using the ‘raw’ scala compiler directly, but using a build tool such as sbt
. For sbt you can override the JDK to use in the same way (nixpkgs/default.nix at 61335d51ace64fa75daa14c58768945af255d997 · NixOS/nixpkgs · GitHub).
1 Like
thanks for the advice, but this didnt override the jdk version.
I’m using NixOS, and I installed scala by adding it to my /etc/nixos/configuration.nix
:
...
environment.systemPackages = with pkgs; [
...
scala
...
]
When I then start ‘scala’, I get:
$ scala
Welcome to Scala 2.13.2 (OpenJDK 64-Bit Server VM, Java 1.8.0_242).
… so it’s using Java 8.
Then when I edit /etc/nixos/configuration.nix
:
environment.systemPackages = with pkgs; [
...
(scala.override { jre = pkgs.jdk11; })
...
]
… and ran sudo nixos-rebuild switch
, I get:
$ scala
Welcome to Scala 2.13.2 (OpenJDK 64-Bit Server VM, Java 11.0.6-internal).
… so it looks like this works for me.
Alternatively, I can also use packageOverrides
:
nixpkgs.config.packageOverrides = pkgs: rec {
scala = pkgs.scala.override {
jre = pkgs.jdk11;
};
};
environment.systemPackages = with pkgs; [
...
scala
...
]
When I nixos-rebuild switch
to that setup, it also appears to work:
$ scala
Welcome to Scala 2.13.2 (OpenJDK 64-Bit Server VM, Java 11.0.6-internal).
Can you spot the difference with what you’re doing?
2 Likes
thank you very much for the detailed explanation. I learned a lot from it.
BTW it worked for me now.
1 Like