Tengo que mover un proyecto de Java 8 a Java 17.
Podría resolver la mayoría de los problemas, pero contiene un método en el que uso ScriptEngineManager para evaluar un término matemático.
ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine e = mgr.getEngineByName("JavaScript"); String t = "5*7"; if (isMathTerm(t)) { System.out.println(e.eval(t).toString()); } En Java 8 funciona según sea necesario, pero en Java 17 e siempre es nulo.
Según Google, el motor de JavaScript ya no es compatible con Java 17.
Debido a las limitaciones del proyecto, no puedo usar bibliotecas de terceros.
¿Hay alguna forma adecuada de manejar esto en Java 17?
Java 15 eliminó el motor JavaScript de Nashorn
Entonces necesita usar un motor de script diferente, como GraalVM
cambiar al motor de JavaScript GraalVM. Primero, agregue las dependencias requeridas a su proyecto.
<dependency> <groupId>org.graalvm.js</groupId> <artifactId>js</artifactId> <version>22.0.0</version> </dependency> <dependency> <groupId>org.graalvm.js</groupId> <artifactId>js-scriptengine</artifactId> <version>22.0.0</version> </dependency>
Luego cambie el nombre del motor a graal.js.
// Graal ScriptEngine graalEngine = new ScriptEngineManager().getEngineByName("graal.js"); graalEngine.eval("print('Hello World!');");
Puede verificar qué motores están disponibles usando
new ScriptEngineManager().getEngineFactories();O agregue diferentes motores de secuencias de comandos a su proyecto como velocidad, jexl, groovy,...