java - 使用 Google App Engine 初始化 Freemarker 时出现 IllegalAccessError

标签 java google-app-engine freemarker

我正在尝试将 Freemarker 2.3 与 GAE 1.7.1 一起使用(我也使用 1.8.1.1 进行了一些测试)但是当 Freemarker 初始化时出现了一个非常奇怪的错误:

java.lang.IllegalAccessError: Class
   com.google.appengine.tools.development.agent.runtime.Runtime can not access
   a member of class freemarker.log.Log4JLoggerFactory with modifiers ""
at freemarker.log.Logger.createFactory(Logger.java:335)
at freemarker.log.Logger.createFactory(Logger.java:304)
at freemarker.log.Logger.selectLoggerLibrary(Logger.java:163)
at freemarker.log.Logger.getLogger(Logger.java:266)
at freemarker.template.utility.SecurityUtilities.<clinit>(SecurityUtilities.java:67)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:69)
at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:64)
at freemarker.ext.beans.BeansWrapper.<clinit>(BeansWrapper.java:147)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:69)
at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:64)
at freemarker.template.ObjectWrapper.<clinit>(ObjectWrapper.java:69)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:69)
at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:64)
at freemarker.core.Configurable.<init>(Configurable.java:139)
at freemarker.template.Configuration.<init>(Configuration.java:142)
at freemarker.template.Configuration.<clinit>(Configuration.java:127)

它发生在实例化配置对象时:

Configuration configuration = new Configuration();

我尝试使用 Logger.selectLoggerLibrary 调用更改底层记录器,但我有类似的东西......

非常感谢您的帮助。

最佳答案

尝试使用 Logger.selectLoggerLibrary 选择 LIBRARY_SLF4JLIBRARY_COMMONS。问题消失了吗?

更新:我明白了为什么它对 GAE 上的 Log4J 这样做。将在 2.3.20-gae 中修复。

关于java - 使用 Google App Engine 初始化 Freemarker 时出现 IllegalAccessError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17328620/

相关文章:

java - 我如何提交 Play! JPA交易手动?

python - Google App Engine 还是 Django?

java - Jedis HMSET map 插入顺序

java - 如何解决java.lang.NoClassDefFoundError : javax/xml/bind/JAXBException

google-app-engine - Cloud Container Builder,ZIP不支持1980年之前的时间戳

linux - google-cloud-sdk 安装在 CentOS/usr/local/bin 中找不到正确的 Python 2.7 版本

java - 如何使用 servlet 运行 Freemarker 模板?

java - FreeMarker 文件路径

spring-boot - SpringBoot中的单元测试Freemarker模板 - 无法初始化freemarker配置

java - 如何使用 Tapestry 组件绘制钻石 t :loop