2017-06-28 134 views
2

我已經使用Blade CLI創建了一個主題,如此處所述https://dev.liferay.com/ja/develop/reference/-/knowledge_base/7-0/theme-template。 該項目因此使用Gradle,當它生成時,它會生成一個可以在liferay中的deploy文件夾中複製的war文件。Liferay 7主題熱部署

在liferay 7中有一種方法,當我像css文件一樣更改靜態資源時,發生變化時幾乎可以立即看到變化嗎?

我找到的解決方案是每次創建一個新的主題戰爭文件並將其部署到liferay中,但將liferay設置爲處於開發模式,如https://dev.liferay.com/ja/develop/tutorials/-/knowledge_base/7-0/using-developer-mode-with-themes所述。這將花費太多時間成爲可接受的解決方案。

我正在考慮創建一個gradle任務,該任務將任何已更改爲liferay中特定文件夾的靜態文件複製。然後當頁面刷新時,更改被捕獲。問題是Liferay 7自帶了OSGi,除了ROOT之外,tomcat/webapps下沒有任何東西。我不太瞭解如何使用OSGi爲模板文件提供服務。

如果我不能使用liferay主題來實現這個功能,是否有liferay 7 mvc portlets的解決方案?我也可能有js或css文件。

有人可以指出我正確的方向,或至少告訴我,如果我想做什麼。謝謝

回答

1

當使用watch任務Liferay Theme Tasks時,它使用OSGi/GoGo界面來部署您的主題,使用本地工作副本的構建文件夾作爲源。

當您進行更改時,監視任務將重新啓動OSGi模塊。您的更改可能需要3秒纔會顯示。

我想象一下類似的事情可以用Gradle來完成。

0

Liferay緩存所有主題的css文件,有時甚至在部署之後。此緩存存儲在兩個地方:

[Liferay的家庭] /tomcat-8.0.32/work/Catalina/localhost/ROOT/css/http_/o/custom-theme-or-portlet

[Liferay的家庭] /工作/自定義門戶

我的開發環境是遠程的,所以我創建了一個任務的gradle刪除每個新部署之前的文件夾。我使用的是SSH gradle plugin部署和我創建的主題項目的build.gradle,舉例:

task buildThemeByGulp(type:Exec) { 
    if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) { 
     commandLine 'cmd', '/c', 'gulp_build.bat' 
    }else{ 
     commandLine './gulp_build.sh' 
    } 
} 

task deployToServerDev { 
    doFirst { 
     println 'Executing gulp build process.' 
    } 
    doLast { 
     ssh.run { 
      session(remotes.developServer) { 
       put from: "${cetelemProjectHome}/themes/cetelem-web-theme/dist/cetelem-web-theme.war", into: "/app/liferay-dxp-digital-enterprise-7.0-sp1/deploy" 
      } 
     } 
    } 
} 

task removeServerCache { 
    doLast { 
     println 'Removing cache folders in server' 
     ssh.run { 
      session(remotes.developServer) { 
       execute 'rm -rf /app/liferay-dxp-digital-enterprise-7.0-sp1/tomcat-8.0.32/work/Catalina/localhost/ROOT/css/http_/o/cetelem-web-theme' 
       execute 'rm -rf /app/liferay-dxp-digital-enterprise-7.0-sp1/work/com.cetelem.web.searcher.portlet-1.0.0' 
      } 
     } 
    } 
} 

deployToServerDev.dependsOn getTasksByName('removeServerCache',true) 
deployToServerDev.dependsOn getTasksByName('buildThemeByGulp',false) 

如果你的環境是本地更容易呢。你會修改gradle任務。其重要創建主題根文件夾內的這兩個文件:

(如果你有一個UNIX等等) gulp_build.sh:

#!/usr/bin/env bash 
gulp clean 
gulp build 

(如果您有Windows) gulp_build。蝙蝠:

@echo off 

gulp build 

exit 

最後你執行刀片GW deployToServerDev(或gradle這個deployToServerDev)和工作流將成爲下一個:

  1. 執行removeServerCache任務刪除主題靜態文件緩存。
  2. 執行buildThemeByGulp任務,執行gulp clean和gulp構建任務(生成戰爭)。
  3. 部署war文件以部署liferay文件夾。