Alfresco 6/7:如何将WebScript与表单文件移出Jar包恢复热更新?
Alfresco CE 6/7 AMP模块开发热更新问题解答
一、能不能改AMP/Jar结构恢复直接改文件的热更新?
可以,但得调整SDK的构建配置,把原本打包进Jar的WebScript、Share表单配置文件直接放到AMP的module/web或module/share目录下,别塞进Jar里。具体操作:
- 打开模块的
pom.xml,找到maven-jar-plugin的配置,把WebScript相关的.js、.xml、.desc.xml,还有Share表单的.xml配置文件排除在Jar打包范围外。 - 再调整
maven-assembly-plugin或者SDK自带的AMP打包配置,把这些排除的文件直接复制到AMP的对应目录——比如仓库WebScript放到module/web/WEB-INF/classes/alfresco/templates/webscripts,Share表单配置放到module/share/WEB-INF/classes/alfresco/web-extension下的对应子目录。
不过这种方式只是回到Alfresco 5的老模式,虽然能恢复热更新,但会丢掉Jar打包带来的类隔离优势,生产环境别用,只适合开发阶段临时凑合用。
二、SDK为啥要改成把文件塞进Jar里?
核心是为了类加载隔离和模块化规范:
- Alfresco 6+基于Spring Boot重构了,类加载机制更严格,Jar形式的模块能更好地隔离不同模块的资源和类,避免多个模块出现同名WebScript、配置文件互相覆盖的冲突。
- 符合现在Java模块化开发的趋势,方便模块分发、版本管理和依赖控制,也适配Spring Boot的Jar包部署模式。
- 能提升系统稳定性,避免直接改解压后的Web应用文件导致的配置混乱、版本不一致问题。
三、WebScript刷新页面为啥还留着?
WebScript刷新页面(就是/alfresco/service/index上的刷新功能)本来是用来重新加载WebScript的定义和资源的,但现在WebScript资源被封在Jar里,Jar文件运行时是只读的,你改外部文件根本读不到——刷新功能只能加载Jar里的原始资源,所以刷新按钮还在,但热更新没用了。
开发阶段替代热更新的靠谱方案
要是不想改AMP结构,推荐用更规范的方式:
- 用Alfresco SDK的热重载功能:启动开发服务器时加
-Dhotreload=true参数,改完WebScript或配置文件,SDK会自动重新打包部署,不用手动重启服务器。 - 用IDE的远程调试:给开发服务器开调试模式,本地IDE连上后,改完代码或配置,通过IDE同步到服务器,再点WebScript刷新就行。
内容的提问来源于stack exchange,提问作者Fjordo
相关产品推荐
相关产品推荐

