Spring

[Hibernate] ScriptAssert사용시 HV000232: No JSR 223 script engine found for language "javascript"

📝 작성 : 2022.01.06  ⏱ 수정 : 
728x90

@ScriptAssert를 사용하면 HV000232: No JSR 223 script engine found for language "javascript"오류가 발생했습니다.

 

결론부터 얘기하면 jdk버전 문제였습니다.

조금 디테일하게는 JVM의 Javascript Engine 문제였으며 GraalVM에서 발생하는 문제였습니다.

 

Nashorn엔진을 사용하는 버전(jdk8 ~ jdk14)을 사용하면 됩니다.

 

 

 

아래는 삽질기입니다.

 

----------------------------------------------------------------------------------------------------------------------

 

 

인터넷을 찾아보니 단순히 jdk11버전이 아니라서 jdk11로 설정하면 된다고만 나와있었습니다.(jdk17사용중이었습니다.)

 

물론 실제로는 @ScriptAssert를 많이 사용하지 않아서 그냥 넘어가도 상관없겠지만 만약 해당 어노테이션을 사용하는 프로젝트는 평생 jdk11만 써야하는 얘기가 됩니다.

 

무언가 이유가 있겠지하는 궁금함에 구글링을 했는데 특별하게 이유가 나와있지 않았습니다.

 

그 와중에 한 질문글을 보게되었습니다.

 

JDK에서 사용가능한 스크립팅 언어 목록을 확인 할 수 있는 코드라고 합니다.

ScriptEngineManager mgr = new ScriptEngineManager();
List<ScriptEngineFactory> engineFactories = mgr.getEngineFactories();

for (ScriptEngineFactory engine : engineFactories) {
    System.out.println("engine.getEngineName() = " + engine.getEngineName());
}

jdk17

아무것도 출력되지 않았습니다. jdk 버전을 낮추어 jdk8로 실행해봤습니다.

jdk8

뭔가가 출력되었습니다. HV000232오류가 나는지 확인해보니 오류가 나지 않습니다.

jdk11로 실행해봤습니다.

jdk11

다시 HV000232오류가 나는지 확인했습니다. 이번에도 잘 작동합니다.

 

아마 HV000232오류는 Nashorn engine의 존재여부와 관련이 있는 것 같습니다.

GraalVM으로 대체된 jdk15부터 해당 오류가 발생하는 것을 확인했습니다.

 

 

사실 자바엔진을 바꿨다는 얘기는 들었었지만 몇 버전부터인지 뭐가 달라지는지는 관심이 없어서 삽질을 한 내용입니다.

반응형