versiones verificar tengo saber que por instalado como actualizar java scala sbt

tengo - verificar java instalado



¿Implementando la versión de Java para el proyecto Scala en sbt? (6)

En SBT 0.13.6 hay una nueva clase VersionNumberCompatibility y VersionNumberCompatibility rasgo de VersionNumberCompatibility . Ajustar el enfoque recomendado por @MarkHarrah para usar este podría hacer lo siguiente:

initialize := { val _ = initialize.value // run the previous initialization val required = VersionNumber("1.8") val curr = VersionNumber(sys.props("java.specification.version")) assert(CompatibleJavaVersion(curr, required), s"Java $required or above required") } ... /** Java specification version compatibility rule. */ object CompatibleJavaVersion extends VersionNumberCompatibility { def name = "Java specification compatibility" def isCompatible(current: VersionNumber, required: VersionNumber) = current.numbers.zip(required.numbers).foldRight(required.numbers.size<=current.‌​numbers.size)((a,b) => (a._1 > a._2) || (a._1==a._2 && b)) def apply(current: VersionNumber, required: VersionNumber) = isCompatible(current, required) }

Mi aplicación scala solo se ejecutará con Java 7 ya que depende de las bibliotecas que solo aparecieron en esa versión del JDK.

¿Cómo puedo aplicar eso en sbt, para que el mensaje de error correcto se muestre inmediatamente al usuario si está utilizando la versión incorrecta de Java al iniciar sbt para ejecutar / compilar la aplicación?

NOTA: NO hay código fuente Java ™ para compilar aquí. Solo tengo el código fuente de Scala. El código de Scala requiere una import java.nio.file.Path que está disponible desde Java 7.


En caso de que use la configuración de cambio scala-ide basada en eclipse en

ventana -> pref - scala compilador -> estándar -> destino -> jvm-1.7



Para cualquiera en el futuro, esta es también una buena manera de hacerlo. Detiene la ejecución inmediatamente si no puede encontrar la versión correcta de Java:

initialize := { val _ = initialize.value // run the previous initialization val required = "1.8" val current = sys.props("java.specification.version") assert(current == required, s"Unsupported JDK: java.specification.version $current != $required") }

build.sbt esto en tu build.sbt .


Siendo el código de Scala, puede poner aserciones en la definición de compilación. sbt define la initialize como un lugar común para cosas como esta, pero puede usar cualquier configuración, incluida una personalizada. Por ejemplo,

initialize := { val _ = initialize.value // run the previous initialization val classVersion = sys.props("java.class.version") val specVersion = sys.props("java.specification.version") assert(..., "Java N or above required") }


Usar javacOptions ++= Seq("-source", "1.7", "-target", "1.7") no funciona si no tiene fuentes Java.

Pero puede establecer la JVM objetivo para el compilador de Scala en build.sbt o Build.scala:

scalacOptions += "-target:jvm-1.7"

Como resultado, se imprime en un JDK 6:

$ sbt clean run [info] Set current project to default-cd5534 (in build file:/tmp/so/) [success] Total time: 0 s, completed 27.10.2013 14:31:43 [info] Updating {file:/tmp/so/}default-cd5534... [info] Resolving org.fusesource.jansi#jansi;1.4 ... [info] Done updating. [info] Compiling 1 Scala source to /tmp/so/target/scala-2.10/classes... [info] Running Main [error] (run-main) java.lang.UnsupportedClassVersionError: Main : Unsupported major.minor version 51.0 java.lang.UnsupportedClassVersionError: Main : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:634) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access$000(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at java.lang.ClassLoader.loadClass(ClassLoader.java:314) [trace] Stack trace suppressed: run last compile:run for the full output. java.lang.RuntimeException: Nonzero exit code: 1 at scala.sys.package$.error(package.scala:27) [trace] Stack trace suppressed: run last compile:run for the full output. [error] (compile:run) Nonzero exit code: 1 [error] Total time: 4 s, completed 27.10.2013 14:31:47

Nota: Tal vez solo funcione para la última versión de SBT / Scalac.