Liferay中ext的发布不是很好。
直接把war包放到deploy的时候,并不能把最新的jar文件或者jsp等文件拷贝到root目录下面去。
这个对开发者来说非常的不方便。因为需要手动更新root下面的文件。
查看了ext的deploy的代码。找到了问题所在。
ExtHotDeployListener类中的 doInvokeDeploy方法里面有这样的代码:
//Ext工程是否已经注册
if (ExtRegistry.isRegistered(servletContextName)) {
if (_log.isInfoEnabled()) {
_log.info(
"Extension environment for " + servletContextName +
" has been applied.");
}
return;
}
Map<String, Set<String>> conflicts = ExtRegistry.getConflicts(
servletContext);
//是否有冲突文件
if (!conflicts.isEmpty()) {
。。。。
return;
}
//拷贝文件
installExt(servletContext, hotDeployEvent.getContextClassLoader());
FileAvailabilityUtil.reset();
通过这个代码可以知道,如果ext工程已经展开过的话,直接return了。并没有做拷贝动作。
同样,如果有冲突文件的话也直接return了。
这个地方的处理不知道liferay的意图。或许是为了维护ext工程的严密性。
开发阶段可以把上面的两个return去掉,每次都强制更新文件来解决这个问题。