如何使用Jar自定义FreeMarker模板?

时间:2017-12-01 08:29:11

标签: tomcat7 alfresco freemarker alfresco-share alfresco-enterprise

不久前,我使用了Alfresco 5.2社区版。当我需要开发某种自定义时,我使用Alfresco Maven SDK和三个不同的Maven archetypes,它是:

  • Alfresco Repository AMP;
  • Alfresco分享AMP;
  • Alfresco all-in-one(AIO)。

通过使用此SDK,我开发了AMP files,使用模块管理工具覆盖alfresco.warshare.war

现在我正在使用Alfresco 4.2.2企业版,问题是多年来所有的自定义都是直接在爆炸的WAR中的服务器上执行的。

此处描述了此方法:Packaging Approaches

  

未打包文件或ZIP

     

许多开发环境都采用可以执行的构建过程   用于将未打包的已修改文件从源代码控制移动到的脚本   Web应用程序的爆炸WAR文件。 Ant,bash或一些脚本   语言都可以成为这样做的好方法......

     

移动未打包的文件具有快速简便的优点   明白......

进一步说:

  

部署位置

     

一种解决方案是使用永久爆炸部署(而不是   在/webapps下部署Alfresco WAR文件。创建一个目录   在webapps目录下调用alfresco并提取内容   alfresco.war进入其中。然后将文件复制到   ../webapps/alfresco/WEB-INF/并重启Tomcat ......

因此,我无法使用AMP自定义(否则所有以前的开发都将被删除)。据我所知,我可以使用替代JAR定制。

如同一份文件所述:

  

JAR

     

v3.4起,Share Web应用程序支持覆盖   打包为JAR文件。这允许多个自定义   彼此隔离,可以预测选择顺序。   静态文件,例如JavaScriptCSS或图像文件   通常可以放在Share应用程序的Web根目录中   被打包成这些JAR ......

     

虽然可以避免覆盖问题(至少在   Tomcat)将这些JAR文件放在tomcat/shared/lib ...

但是,我也无法利用这种方法。例如,我需要覆盖FreeMarker模板:

/opt/tomcat7/webapps/share/WEB-INF/classes/alfresco/web-extension/site-webscripts/components/form/service-note/service-note-order-things.ftl

我在IDE中创建适当的目录结构,以某种方式更改模板,并构建Jar文件。然后我将它放在tomcat7/shared/lib中(我也将它放在tomcat7/webapps/share/WEB-INF/lib中,但也没有成功)并重新启动应用程序服务器。

重新启动后,我看不到我的更改 - 模板保持不变。此外,如果我尝试将另一个模板添加到同一目录(.../service-note/...),则不会出现新模板。

在我的Tomcat安装中,共享类加载器已正确配置。

我做错了什么?如何使用JAR覆盖静态资源?

我将非常感谢这些信息。谢谢大家。

1 个答案:

答案 0 :(得分:2)

必须使用SurfBug debugging tool来标识模板文件(Template Type属性)。

然后开发Spring Surf扩展模块 - "are the preferred way of customizing many of the Alfresco Share user interface features" - 并将其打包到Jar中。 然后我应该使用通过网络提供的Module deployment - 脚本在:

http://host:port/share/service/modules/deploy

FTL可以自定义如下:

  • 将新内容放在特定@region;
  • 之前/之后
  • 使用新内容替换特定@region的内容;
  • 完全删除某个@region

在文件系统中,我们将使用相同的未修改模板,因为Spring Surf会写入内存模型,然后允许扩展在模型刷新到输出流之前操作该模型。

另见: