如何解决Google App Engine openJdk中的“找不到辅助技术”错误?
我正在开发一个使用Apache Batik的网络应用程序,它在本地使用jetty和oracle jdk都可以正常工作,但是当我将其部署到Google-App-Engine并调用API时,我遇到了错误。
Caused by: java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibility.AtkWrapper
at java.awt.Toolkit.loadAssistiveTechnologies(Toolkit.java:807)
at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:886)
at org.apache.batik.bridge.CursorManager.<clinit>(CursorManager.java:102)
at org.apache.batik.bridge.BridgeContext.<init>(BridgeContext.java:1162)
at org.apache.batik.bridge.BridgeContext.<init>(BridgeContext.java:292)
at org.apache.batik.transcoder.SVGAbstractTranscoder.createBridgeContext(SVGAbstractTranscoder.java:336)
at org.apache.batik.transcoder.SVGAbstractTranscoder.createBridgeContext(SVGAbstractTranscoder.java:312)
我在Google中搜索的人说:“这可以通过编辑OpenJDK 8的accessibility.properties文件来完成。”
注释以下行:
#assistive_technologies=org.GNOME.Accessibility.AtkWrapper
但是我使用的是Google App Engine,不确定该怎么做?
任何帮助将不胜感激。
答案 0 :(得分:2)
我通过动态设置系统属性来解决此问题。
A[0]
答案 1 :(得分:0)
我面临着同样的问题。
我的解决方案:
使用自定义docker映像。
在app.yaml中使用运行时自定义
runtime: custom
在src / main / docker / Dockerfile中添加新文件“ Dockerfile”
FROM gcr.io/google-appengine/jetty
ADD you_war_fle_name_inside_target_dir $JETTY_BASE/webapps/root.war
WORKDIR $JETTY_BASE
RUN sed -i -e '/^assistive_technologies=/s/^/#/' /etc/java-*-openjdk/accessibility.properties
RUN java -jar $JETTY_HOME/start.jar --approve-all-licenses --create-startd --add-to-start=jmx,stats,hawtio && chown -R jetty:jetty $JETTY_BASE
然后从云控制台运行以下命令。
mvn package -DskipTests appengine:deploy
答案 2 :(得分:0)
JDK 9至JDK 13遭受JDK-8216008 -Djavax.accessibility.assistive_technologies empty list leads to exception的困扰。由于遗留行为,可以使用对系统类加载器可见的任何有效类名,而不是空字符串。
在所有JDK版本上禁用Assistantive_technologies的一种方法是指定在构造期间不执行任何操作的类:
-Djavax.accessibility.assistive_technologies=java.lang.Object
在JDK9和更高版本上,工具包尊重无头属性,但这在JDK8上不起作用。
-Djava.awt.headless=true