Liferay 6.0.6 / JBOSS - 如何在不经常重新部署的情况下编辑portlet中的JavaScript?

时间:2012-01-23 14:10:47

标签: javascript jboss liferay portlet

我正在尝试修复Liferay portlet中的一个棘手的JavaScript问题(也恰好运行一个大型Flex应用程序),每次我做出更改时,我都要回到提示并执行“ant部署” “在portlet上,然后等待它部署,然后重新加载页面,然后等待Flex应用程序加载。每次我尝试任何微小的改变,整个过程需要3-4分钟。

是否有一个配置或设置会解压缩JavaScript并允许我直接编辑服务器上的JS文件而无需每次重新部署?我已经阅读了一些关于“开发者模式”但它似乎没有工作,并且所有Liferay文档似乎都特定于Tomcat,而我正在使用JBoss。

2 个答案:

答案 0 :(得分:1)

如果要部署war文件,只需在适当位置(在jboss deploy目录中)将其爆炸,因此,您将拥有一个名为 FlexPort.war 的压缩文件,而不是一个名为 FlexPort.war 的压缩文件。 strong> FlexPort.war ,它将包含原始WAR文件中的所有爆炸内容。

如果更新JavaScript文件,则可能需要在浏览器中清除缓存,否则它应立即生效。如果您更新了课程,则可以通过 触摸 - WAR / web-inf / web.xml 文件快速重新部署。

<强> ============================================ ===============

不确定为什么你没有看到JS更新,但尝试重现这个序列。安装FirebugFiddler等浏览器工具会有所帮助,因此您可以看到响应标题。

  1. 直接将JS文件检索到浏览器中。例如http://localhost:8080/js/admin/jquery-ui-1.8.12.custom.min.js
  2. 记下上次修改响应标题。
  3. 修改JS文件并保存。 (确保文件的文件系统时间戳已更改)
  4. 再次检索JS文件。 Last-Modified 响应标头应该增加到与文件系统时间戳的时间戳相同的值。
  5. 确保HTTP响应代码 200 而不是 304 (未修改)。
  6. 如果您在文件修改后仍然看到相同的时间戳:

    1. 可能是浏览器缓存(请参阅上面的 304 评论)
    2. 我认为Liferay可能正在缓存所有内容,因此在重新部署WAR之前,文件系统上的更改不会生效。如果是这种情况,请尝试 *触摸 * myportlet.war / WEB-INF / web.xml 文件,这将导致重新部署WAR。效率不高,但希望比重新发布ant命令更快。
    3. 一个快速的谷歌透露了关于Liferay Static Content Caching的这个链接。似乎Liferay可能确实在ehcache中缓存了所有这些东西。如果您的portlet应用程序就是这种情况,您有两个选择:

      • 通过在 portal-ext.properties 中设置此属性来关闭缓存(当然只在开发中):com.liferay.portal.servlet.filters.cache.CacheFilter=false

      • 如果Liferay为ehcache注册了JMX接口,您可以通过JMX-Consoletwiddle手动从缓存中删除目标项。使用其中任何一个,一旦确定了确切的操作,就可以创建一个批处理文件,以便在命令行上按需执行它。

答案 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标头)