Liferay 7主题热部署

时间:2017-06-28 16:16:57

标签: gradle liferay-theme liferay-7 hotdeploy

我使用Blade CLI创建了一个主题,如https://dev.liferay.com/ja/develop/reference/-/knowledge_base/7-0/theme-template所述。 因此该项目使用 Gradle ,并在构建时生成一个war文件,我可以在liferay中的deploy文件夹中复制该文件。

在liferay 7中是否有一种方法,当我更改像css文件这样的静态资源时,在开发时几乎可以立即看到这种变化?

我找到的解决方案是每次创建一个新的主题war文件并将其部署在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 portlet是否有解决方案?我也可能有js或css文件。

有人能指出我正确的方向,或至少告诉我,我能做什么。感谢

3 个答案:

答案 0 :(得分:1)

使用Liferay Theme Taskswatch任务时,它使用OSGi / GoGo界面来部署您的主题,使用您当地的工作副本构建文件夹作为源。

进行更改时,监视任务会重新启动OSGi模块。您的更改可能需要3秒才能显示。

我想像Gradle可以做类似的事情。

答案 1 :(得分:0)

Liferay缓存所有主题的css文件,有时甚至在部署之后。此缓存存储在两个位置:

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

<强> [liferay的家庭] /工作/定制的portlet

我的开发环境是远程的,所以我创建了一个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

(如果你有窗户) gulp_build.bat:

@echo off

gulp build

exit

最后执行 blade gw deployToServerDev (或 gradle deployToServerDev ),工作流将成为下一个:

  1. 执行removeServerCache任务删除主题静态文件缓存。
  2. 执行buildThemeByGulp任务执行gulp clean和gulp构建任务(生成战争)。
  3. 部署war文件以部署liferay文件夹。

答案 2 :(得分:0)

在命令提示符下对主题目录执行gulp watch命令。

我希望这会对你有所帮助。