我使用的是内容存储库 (Adobe CQ5),其下有 Apache Sling。我想使用 FreeMarker 而不是 JSP 呈现网页。
为此,我应该将 OSGi Freemarker 扩展上传到 Sling(可在 Sling 源代码的贡献部分找到),还是应该上传 OSGi 版本的 Freemarker?这两个 jar 都实现了 javax.script.ScriptEngineFactory 接口(interface),所以我不知道该使用哪一个,也不知道要同时上传这两个。
最佳答案
我通过执行以下操作设法让 Freemarker 在 CQ5.3 上工作:
- 从 svn checkout http://svn.apache.org/repos/asf/sling/trunk 获取源代码吊带
- 转到 contrib/scripting/freemarker 并从 FreemarkerScriptEngine.java 中删除所有日志记录和 slf4j 引用 - 由于 NoClassDefFoundException 抛出 500 错误 - 我认为 CQ5 与 Freemarker 中包含的 slf4j 版本之间存在冲突(我没有挖掘找出问题所在)
- 构建并安装它,它应该出现在 bundle 下的 Sling 控制台和“脚本引擎”页面中,现在让您可以使用 .ftl 脚本。
我通过在 CQ5 中创建 bundle 、导入代码并将常用的 freemarker.jar 添加到 bundle 中来实现略有不同,但这应该也有效,因为它基本上是同一件事。
我遇到的问题是脚本引擎确实被列出但日志记录阻止它运行,这就是为什么您需要从引擎中删除日志和 slf4j。
关于freemarker - 将 FreeMarker 与 Apache Sling 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6309615/