java.lang.LinkageError:无法链接freemarker / core / TemplateElement

时间:2017-03-30 07:21:36

标签: java freemarker jboss-eap-6

我的问题是我有一个ejb,它在内部使用freemarker工具生成一个HTML页面,构建并部署到JBoss EAP 6.4.10。当我尝试访问此功能(使用freemarker工具生成HTML代码)时,jboss会抛出以下错误:

  

java.lang.LinkageError:无法链接freemarker / core / TemplateElement   引起:java.lang.NoClassDefFoundError:javax / swing / tree / TreeNode

我在jboss模块中添加了freemarker jar,它的module.xml看起来像这样:

<module xmlns="urn:jboss:module:1.1" name="org.freemarker">
<resources>
    <resource-root path="freemarker-2.3.25.jar"/>
</resources>

<dependencies>
</dependencies>
</module>

2 个答案:

答案 0 :(得分:0)

Google App Engine存在同样的问题,即Java SE中必不可少的某些类不存在。因此,请尝试使用org.freemarker:freemarker-gae代替普通org.freemarker:freemarker

无论如何,那是什么样的平台,为什么那个班级失踪了?是Google App Engine吗?

更新:当然,JBoss EAP的类加载器不会出于某种原因导出javax.swing包(请参阅注释)。虽然使用freemarker-gae工作,但是你必须小心地将来自其他地方的非gae FreeMarker排除为传递Maven(或Gradle等)依赖。因此,修改JBoss模块配置会更加可维护。我看到一些用-Djboss.modules.system.pkgs=javax.swing启动JBoss EAP,但是如果Swing可用于同一JVM中的其他模块,那么必须有一个更优雅的解决方案,例如向deployment-structure.xml添加内容,或者如果你定义你自己的JBoss模块然后到它的module.xml。也许您应该检查哪个标准模块导出swing包(“javax.api”?),并尝试将该模块声明为依赖。

答案 1 :(得分:0)

最后发现错误是由于freemaker的module.xml文件中缺少依赖项'javax.api',在module.xml中添加此依赖项后,问题已解决。

<module xmlns="urn:jboss:module:1.1" name="org.freemarker">
<resources>
    <resource-root path="freemarker-2.3.25.jar"/>
</resources>

<dependencies>
    <module name="javax.api"/>
</dependencies>