Liferay 6.0.6 / JBOSS - Как я могу редактировать JavaScript в портлете без постоянного повторного развертывания? - PullRequest
1 голос
/ 23 января 2012

Я пытаюсь исправить сложную проблему JavaScript в портлете Liferay (которая также запускает большое приложение Flex), и каждый раз, когда я делаю изменения, мне приходится возвращаться к приглашению и выполнять «развертывание муравья». "на портлете, затем дождитесь его развертывания, затем перезагрузите страницу и дождитесь загрузки приложения Flex. Каждый раз, когда я пытаюсь внести незначительные изменения, на весь этот процесс уходит 3-4 минуты.

Существует ли конфигурация или параметр, который будет распаковывать JavaScript и позволять мне напрямую редактировать файлы JS на сервере без повторного развертывания каждый раз? Я читал кое-что о «Режиме разработчика», но, похоже, он не работает, и все документы Liferay кажутся специфичными для Tomcat, тогда как я использую JBoss.

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Взрыв файла войны не сработал для меня.Я могу обойти эту проблему с помощью сценария node.js (статический файловый сервер http) .При редактировании JS я копирую этот сценарий в папку javascript внутри проекта портлета и запускаю сервер (вам нужно установить node.js на вашем компьютере разработчика).Затем я меняю ссылки на мои 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 на статическом файловом сервере)

1 голос
/ 23 января 2012

Если вы развертываете военный файл, просто взорвите его на месте (в каталоге развертывания jboss), чтобы вместо одного сжатого файла с именем FlexPort.war у вас был бы каталог с именем FlexPort.war , в котором содержится весь разнесенный контент из исходного файла WAR.

Если вы обновляете файлы JavaScript, вам может потребоваться очистить кэш в браузере, но в противном случае он должен действовать правильнодалеко.Если вы обновляете классы, вы можете вызвать быстрое повторное развертывание с помощью touch - файла WAR / web-inf / web.xml .

===========================================================

Не уверен, почему вы не видите обновления JS, но попробуйте воспроизвести эту последовательность.Помогает установить какой-либо инструмент браузера, например Firebug или Fiddler , чтобы вы могли видеть заголовки ответов.

  1. Получите файл JS прямо в ваш браузер.Например, http://localhost:8080/js/admin/jquery-ui-1.8.12.custom.min.js
  2. Запишите заголовок ответа Last-Modified .
  3. Измените файл JS и сохраните.(Убедитесь, что временная метка файловой системы изменилась)
  4. Снова получите файл JS.Заголовок ответа Last-Modified должен быть увеличен до того же значения, что и отметка времени файловой системы.
  5. Убедитесь, что код ответа HTTP равен 200 , а не 304 (Не изменено).

Если после изменения файла вы все еще видите ту же метку времени:

  1. Это может быть кэширование в браузере (см. 304 комментарий выше)
  2. Я полагаю, что Liferay может кэшировать все содержимое, поэтому изменения в файловой системе не вступят в силу, пока вы не повторно развернете WAR.В этом случае попробуйте * коснитесь * файла myportlet.war / WEB-INF / web.xml , который приведет к повторному развертыванию WAR.Не так эффективно, но, надеюсь, быстрее, чем переиздание команды ant.

Быстрый Google обнаружил эту ссылку о Кэширование статического содержимого Liferay .Кажется, Liferay действительно может кэшировать все это в ehcache.Если это так в вашем приложении с портлетами, у вас есть 2 варианта:

  • Отключите кэширование (конечно, только в dev), установив это свойство в portal-ext.properties : com.liferay.portal.servlet.filters.cache.CacheFilter=false

  • Если Liferay регистрирует интерфейсы JMX для ehcache, вы можете хирургически удалить целевые элементы из кэша через JMX-Console или тиддл .С любым из них, когда вы определитесь с точной операцией, вы можете создать командный файл для его выполнения по требованию в командной строке.

...