sbt
échoue avec une erreur cryptique lors de l'émission de toute commande ( compile
, assembly
, clean
ou autre).
$ sbt --version error: error while loading String, class file '/modules/java.base/java/lang/String.class' is broken (class java.lang.NullPointerException/null)
Je suis sur une machine exécutant macOS et sbt
été installé via homebrew . J'ai essayé de passer aux dernières versions de sbt
( 1.3.10 ), mais l'erreur persiste.
4 Réponses :
Le problème est documenté sur la page de téléchargement SBT .
Les responsables de Homebrew ont ajouté une dépendance au JDK 13 parce qu'ils veulent utiliser plus de dépendances de brew ( brew # 50649 ). Cela amène sbt à utiliser le JDK 13 même lorsque java disponible sur PATH est JDK 8 ou 11. Pour empêcher sbt de s'exécuter sur JDK 13, installez jEnv ou passez à l'utilisation de SDKMAN .
J'ai pu résoudre le problème en utilisant JDK 8 via jEnv
.
n'a pas fonctionné pour moi, mais l'autre réponse sur le changement de JDK dans les configs sbt a résolu le problème dans mon cas.
Depuis sbt documente les JDK 8 et 11 comme versions compatibles
Nous recommandons AdoptOpenJDK JDK 8 ou AdoptOpenJDK JDK 11
essayez de contrôler quel JDK est utilisé par sbt via le -java-home
qui peut être configuré à l'échelle du système via sbtopts
run configuration
-java-home /Users/picard/.sdkman/candidates/java/current
ou par projet via
<project-root>/.sbtopts
Par exemple, pour configurer le JDK utilisé par sbt dans le projet actuel, essayez de définir dans .sbtopts
/usr/local/etc/sbtopts
J'ai eu le même problème récemment. Ce qui a fonctionné pour moi, c'est d'installer SDKMAN
( https://sdkman.io/ )
sdk install java 11.0.3.hs-adpt
Après l'installation, je voulais voir quelles versions de Java je pouvais installer. Je lance donc simplement cette commande pour lister toutes les versions disponibles de Java
sdk list java
Choisissez la version que vous souhaitez installer (recommandez d'installer 8 ou 11 comme mentionné ci-dessus) et exécutez simplement la commande avec l'identifiant qui spécifie votre version dans la liste
$ curl -s "https://get.sdkman.io" | bash ... $ source "$HOME/.sdkman/bin/sdkman-init.sh" ...
Après l'installation, il a défini Java 11 par défaut sur mon système. J'ai ensuite exécuté à nouveau la commande sbt
et cela a fonctionné.
C'est ce qui a résolu mon problème sur mon Mac.
sdk install sbt
Installez sdkman
curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh"
Installez sbt via sdk
brew uninstall sbt
Où (dans quel répertoire) avez-vous exécuté la commande sbt? si vous utilisez un projet sbt, vérifiez la version sbt dans
project/build.properties
Quel JDK avez-vous installé?
Salut, le problème semble être dû au fait que JDK 13 est devenu la version JDK par défaut dans
homebrew
. J'ai publié une solution ci-dessous.