简体   繁体   English

Log4j2/Slf4j 和 Java 11

[英]Log4j2/Slf4j and Java 11

I'm currently trying to build an app with log4j/slf4j and java 11 but I'm facing this problem at runtime:我目前正在尝试使用 log4j/slf4j 和 java 11 构建一个应用程序,但我在运行时遇到了这个问题:

2018-12-10 22:09:27,225 main INFO Cannot initialize scripting support because this JRE does not support it. java.lang.NoClassDefFoundError: javax/script/ScriptEngineManager
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.script.ScriptManager.<init>(ScriptManager.java:69)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:216)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:250)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:547)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:619)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:636)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:231)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
    at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
    at org.apache.logging.log4j/org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
    at org.apache.logging.log4j/org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:121)
    at org.apache.logging.log4j.slf4j@2.11.1/org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:49)
    at org.apache.logging.log4j/org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
    at org.apache.logging.log4j.slf4j@2.11.1/org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j/org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:355)
    at org.slf4j/org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:380)
    at fr.mrcraftcod.nameascreated/fr.mrcraftcod.nameascreated.NameAsCreated.<clinit>(NameAsCreated.java:39)
Caused by: java.lang.ClassNotFoundException: javax.script.ScriptEngineManager
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 17 more

The code that is at the origin of this is the initialization of my logger:起源于此的代码是我的记录器的初始化:

private static final Logger LOGGER = LoggerFactory.getLogger(NameAsCreated.class);

I have dependencies on:我依赖于:

  • org.apache.logging.log4j:log4j-api:2.11.1 org.apache.logging.log4j:log4j-api:2.11.1
  • org.apache.logging.log4j:log4j-core:2.11.1 org.apache.logging.log4j:log4j-core:2.11.1
  • org.apache.logging.log4j:log4j-slf4j18-impl:2.11.1 org.apache.logging.log4j:log4j-slf4j18-impl:2.11.1
  • A maven project that depends on org.slf4j:slf4j-api:1.8.0-beta2一个依赖 org.slf4j:slf4j-api:1.8.0-beta2 的 maven 项目

I'm on OSX Mojave with Java version:我在 OSX Mojave 上使用 Java 版本:

openjdk version "11" 2018-09-25
OpenJDK Runtime Environment AdoptOpenJDK (build 11+28-201810021910)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11+28-201810021910, mixed mode)

Does someone have an idea of what I'm doing wrong and how I can solve this?有人知道我做错了什么以及我如何解决这个问题吗?

According to the Log4j documentation :根据Log4j 文档

Log4j provides support for JSR 223 scripting languages to be used in some of its components. Log4j 支持在其某些组件中使用 JSR 223 脚本语言。

and as said in the comments by Alan Bateman from Java 9 you have to add explicitly the java scripting module either with --add-modules java.scripting or in module-info.java .正如Alan Bateman在 Java 9 的评论中所说,您必须使用--add-modules java.scripting或在module-info.java显式添加 java 脚本模块。

Note also that the module jdk.scripting.nashorn is deprecated in Java 11 and will be removed in a future release.另请注意,模块jdk.scripting.nashorn在 Java 11 中已弃用,并将在未来版本中删除。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM