使用Liferay Maven 编译部署Theme 深入分析

今天同事问我在Maven构建Theme时Liferay框架默认资源文件从何处获取,我对比了下使用Ant来编译部署 Theme和使用Maven来编译部署Theme的过程,发现:在复制框架默认资源文件时,居然是完全不同的策略!

Ant 复制Liferay默认资源文件的策略:

大家都知道,在用Ant编译Theme时,我们程序员需要 在_diffs目录下添加一些和Liferay框架不同的资源文件,而Liferay框架本身的资源文件都会从 $LIFERAY_HOME\tomcat-7.0.23\webapps\ROOT\html\themes目录下复制到你的新建theme项目。

<copy todir="docroot" overwrite="true">
                    <fileset
                        dir="${app.server.portal.dir}/html/themes/_styled"
                    />
                </copy>

Maven复制Liferay默认资源文件的策略:

Maven不会从 ROOT/html/themes复制资源文件,相反,它会从一个叫portal-web-6.1.0.war中复制过来的。这个war包在你 机器~/.m2/repository指向的本地仓库中:比如我的就在 C:\Documents and Settings\charles.wang\.m2 \repository\com\liferay\portal\portal-web\6.1.0 目录下。

而这一切都发生在liferay-maven-plugin生命周期的theme-merge阶段,当我们吧速度放 慢一万倍,我们就可以清楚的看到细节了(太极的精髓啊)。

theme-merge阶段用于吧我们自己开发的资 源文件+系统资源文件merge到artifact中:

首先它会定义相关的环境配置:

[DEBUG] -----

------------------------------------------------------------------
[DEBUG] Goal:          com.liferay.maven.plugins:liferay-maven-plugin:6.1.0:theme-merge 

(default)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <liferayVersion>6.1.0</liferayVersion>
  <localArtifactRepository>${localRepository}</localArtifactRepository>
  <parentTheme default-value="_styled">_styled</parentTheme>
  <remoteArtifactRepositories>${project.remoteArtifactRepositories}

</remoteArtifactRepositories>
  <themeType default-value="vm">vm</themeType>
  <webappDir>${project.build.directory}/${project.build.finalName}</webappDir>
  <workDir>${project.build.directory}/liferay-theme/work</workDir>
</configuration>

最终执行theme-merge对应的类,位于liferay-maven-plugin-6.1.0.jar的 ThemeMergeMojo类,类中用到的所有的参数都是写在配置文件然后传递进去的:

这些参数和你的运行 Maven命令的机器有关,因为你毕竟设置了~/.m2/repository本地仓库,而且你也设置了pom.xml,在我机器上 这些参数的细节可以见02-16行:

01.[DEBUG] Configuring mojo 'com.liferay.maven.plugins:liferay-maven-plugin:6.1.0:theme-merge' with basic configurator -- >
02.[DEBUG] (f) liferayVersion = 6.1.0
03.[DEBUG] (f) localArtifactRepository = id: local
04. url: file:///C:/Documents%20and%20Settings/charles.wang/.m2/repository/
05. layout: none
06.
07.[DEBUG] (f) parentTheme = _styled
08.[DEBUG] (f) remoteArtifactRepositories = [ id: central
09. url: http://repo1.maven.org/maven2
10. layout: default
11.snapshots: [enabled => false, update => daily]
12.releases: [enabled => true, update => daily]
13.]
14.[DEBUG] (f) themeType = vm
15.[DEBUG] (f) webappDir = D:\WalmartProject\maven-build-theme\target\maven-build-theme-0.0.1 -SNAPSHOT
16.[DEBUG] (f) workDir = D:\WalmartProject\maven-build-theme\target\liferay-theme\work
17.[DEBUG] -- end configuration –
18.[DEBUG] Expanding: C:\Documents and Settings\charles.wang\.m2 \repository\com\liferay\portal\portal-web\6.1.0\portal-web-6.1.0.war into D:\WalmartProject\maven-build-theme\target\liferay-theme\work (这一行就是从何处获取资源文件的日 志)

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索maven
, debug
, 文件
, themes
, maven dependencie
, maven 2
, repository
, maven 编译 trunk
, maven war
, liferay
, maven setting
, 资源
debug 非常慢
liferay6.2 theme部署、liferay theme、liferay theme 开发、liferay 7 theme开发、liferay theme js,以便于您获取更多的相关知识。

时间: 2024-12-28 18:24:10

使用Liferay Maven 编译部署Theme 深入分析的相关文章

Jersey “Auto-Discoverable Features” 在 Maven 编译后失效

问题 原本 Jersey "Auto-Discoverable Features"(自动发现功能)中 JSON 解析在 eclipse 右键运行项目是正常的,但用 Maven 编译成 jar 后运行,就无法使用 JSON 解析了 Jersey "Auto-Discoverable Features" Jersey "Auto-Discoverable Features"(自动发现功能).默认情况下 Jersey 2.x 不隐式注册在 classp

使用maven编译Java项目

综述 本文演示了用Maven编译Java项目 需要 时间:15分钟 文本编辑器或者IDE JDK 6 或者更高版本 创建项目 本例主要为了展示Maven,所以Java的项目力求简单. 创建项目结构 选择一个项目目录,在 *nix系统上使用下面语句 mkdir -p src/main/java/hello window下使用命令 mkdir src\main\java\hello 创建如下结构: └── src └── main └── java └── hello 在src/main/java/

maven项目部署在linux上的jar包问题

问题描述 maven项目部署在linux上的jar包问题 昨天吧写好的程序部署在linux上准备测试.发现找不到hibernate3.0.6.jar 看后发现, 这个jar包是引用在本地磁盘上的一个jar包.如:G:xxxx/xxxx/xx/hibernateXX.jar ,但是maven的jar包也已经打包到lib下放到程序包的同级目录下.可能linux上没有盘符, 而maven里找jar包的是通过pom文件找jar包的.pom文件里面写的是G:xxxxxxx.hibernateXX.jar

菜鸟调错(一)Maven项目部署到Jboss出现的错误

Maven项目部署到Jboss出现:Failed to create a new SAX parser 今天调试的时候遇到一个错误,往Jboss的deploy目录扔war包的时候,报了一个"Failed to create a new SAX parser"的错误.在网上找了找解决方案,一般都说将项目中的xerces-2.6.2.jar和xml-apis.jar包删掉即可,但是我试了试删了还是不行,因为在打包的时候Maven还是会将它们打进你的war包. 首先,我的项目中用到了dwr,

maven编译问题, 着了魔一样的Compilation failure

问题描述 maven编译问题, 着了魔一样的Compilation failure 被这个问题困扰好几天了, 目前已经处于崩溃状态, 实在是没有办法了,有人能解决这个问题吗, 我真的跪谢了. 环境变量 JAVA_HOME:D:Program FilesJavajdk1.7.0_79 pom.xml插件配置如下: ...... 1.7 ...... org.apache.maven.pluginsmaven-compiler-plugin2.5.1 ${jdk.version}${jdk.vers

图片-在后台运行jetty 将maven项目部署到jetty容器

问题描述 在后台运行jetty 将maven项目部署到jetty容器 在后台运行jetty 将maven项目部署到jetty容器 后台显示正常 但是打开浏览器却显示资源有问题 解决方案 maven项目中jetty运行配置jetty项目部署和启动

关于maven远程部署多模块web项目到tomcat失败问题

问题描述 关于maven远程部署多模块web项目到tomcat失败问题 主模块: <?xml version=""1.0"" encoding=""UTF-8""?><project xmlns=""http://maven.apache.org/POM/4.0.0"" xmlns:xsi=""http://www.w3.org/2001/XMLSc

hadoop2.3的fuse怎么用maven编译?

问题描述 hadoop2.3的fuse怎么用maven编译? 网上给出的方法都是用ant编译的,但是新版的hadoop都已经用maven了,源码的目录中没有build.xml是pom.xml,如何把hdfs fuse的模块编译出来呢?

执行 Maven 编译的 jar,找不到相关的 依赖的类--使用 maven-assembly-plugin 解决

问题:执行 jar 找不到依赖的类 用 Maven 编译完成后 ,生产了 ui-compressor-1.0.0.jar, 此时执行 java -cp target/ui-compressor-1.0.0.jar com.waylau.uicompressor.App 提示下面找不到依赖的包: Exception in thread "main" java.lang.NoClassDefFoundError: org/mozilla/javascrip t/ErrorReporter