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去掉,每次都強制更新文件來解決這個問題。