我正在尝试修复Liferay portlet中的一个棘手的JavaScript问题(也恰好运行一个大型Flex应用程序),每次我做出更改时,我都要回到提示并执行“ant部署” “在portlet上,然后等待它部署,然后重新加载页面,然后等待Flex应用程序加载。每次我尝试任何微小的改变,整个过程需要3-4分钟。
是否有一个配置或设置会解压缩JavaScript并允许我直接编辑服务器上的JS文件而无需每次重新部署?我已经阅读了一些关于“开发者模式”但它似乎没有工作,并且所有Liferay文档似乎都特定于Tomcat,而我正在使用JBoss。
答案 0 :(得分:1)
如果要部署war文件,只需在适当位置(在jboss deploy目录中)将其爆炸,因此,您将拥有一个名为 FlexPort.war 的压缩文件,而不是一个名为 FlexPort.war 的压缩文件。 strong> FlexPort.war ,它将包含原始WAR文件中的所有爆炸内容。
如果更新JavaScript文件,则可能需要在浏览器中清除缓存,否则它应立即生效。如果您更新了课程,则可以通过 触摸 - WAR / web-inf / web.xml 文件快速重新部署。
<强> ============================================ =============== 强>
不确定为什么你没有看到JS更新,但尝试重现这个序列。安装Firebug或Fiddler等浏览器工具会有所帮助,因此您可以看到响应标题。
http://localhost:8080/js/admin/jquery-ui-1.8.12.custom.min.js
如果您在文件修改后仍然看到相同的时间戳:
一个快速的谷歌透露了关于Liferay Static Content Caching的这个链接。似乎Liferay可能确实在ehcache中缓存了所有这些东西。如果您的portlet应用程序就是这种情况,您有两个选择:
通过在 portal-ext.properties 中设置此属性来关闭缓存(当然只在开发中):com.liferay.portal.servlet.filters.cache.CacheFilter=false
如果Liferay为ehcache注册了JMX接口,您可以通过JMX-Console或twiddle手动从缓存中删除目标项。使用其中任何一个,一旦确定了确切的操作,就可以创建一个批处理文件,以便在命令行上按需执行它。
答案 1 :(得分:1)
爆炸战争档案对我来说没有用。我使用node.js script(an http static file server)解决了这个问题。我所做的是在编辑JS时我将这个脚本复制到portlet项目中的javascript文件夹并启动服务器(你需要在dev机器上安装node.js)。然后我将portlet中我的JS脚本的引用更改为指向静态服务器URL。 例如: - 在你的liferay-portlet.xml中,
<footer-portlet-javascript>/js/app.js</footer-portlet-javascript>
更改为,
<footer-portlet-javascript>http://localhost:8888/app.js</footer-portlet-javascript>
之后,我可以立即编辑文件并在浏览器中查看更改。
(您还必须在静态文件服务器中设置Access-Control-Allow-Origin标头)