【问题标题】:Using FreeMarker with Apache Sling将 FreeMarker 与 Apache Sling 一起使用
【发布时间】:2011-09-12 16:04:04
【问题描述】:
我正在使用下面有 Apache Sling 的内容存储库 (Adobe CQ5)。我想使用 FreeMarker 而不是 JSP 来呈现网页。
为此,我应该将 OSGi Freemarker 扩展上传到 Sling(可在 Sling 源代码的贡献部分中找到),还是应该上传 OSGi 版本的 Freemarker?两个 jar 都实现了接口 javax.script.ScriptEngineFactory 所以我不知道使用哪一个,或者两个都上传。
【问题讨论】:
标签:
freemarker
scriptengine
sling
aem
【解决方案1】:
通过执行以下操作,我设法让 Freemarker 在 CQ5.3 上工作:
- 从svn checkouthttp://svn.apache.org/repos/asf/sling/trunksling获取源码
- 转到 contrib/scripting/freemarker 并从 FreemarkerScriptEngine.java 中删除所有日志记录和 slf4j 引用 - 由于 NoClassDefFoundException,它会引发 500 错误 - 我认为 CQ5 和 Freemarker 中包含的 slf4j 版本之间存在冲突(我没有挖掘来找出问题所在)
- 构建并安装它,它应该出现在 Sling 控制台中的 bundles 下和“脚本引擎”页面中,让您现在可以使用 .ftl 脚本。
我通过在 CQ5 中创建捆绑包、导入代码并将股票 freemarker.jar 添加到捆绑包中的做法略有不同,但这应该也可以工作,因为它基本上是相同的。
我遇到的问题是脚本引擎确实被列出,但日志记录阻止它运行,这就是您需要从引擎中删除日志和 slf4j 的原因。
【解决方案2】:
我不知道 Freemarker 的 OSGi 版本;我们专门为 Sling 创建了自己的 Freemarker 捆绑包。如果您成功使用了 OSGi 版本的 Freemarker,请告诉我们 ;-)
测试很简单:只需通过 Web 控制台安装捆绑包并在 Web 控制台中检查支持的脚本引擎配置状态。如果您看到此处列出的 Freemarker 引擎,它应该可以工作。