分享

使用Maven 2创建WebLogic Portal应用程序

 larrin 2007-05-15
使用Maven 2创建WebLogic Portal应用程序

时间:2007-04-10
作者:Gerald Nunn
浏览次数: 211
本文关键字:mavenweblogic portalpomrepositoryantbuild systemsmaven 2dependenciesDev ToolboxBEA Workshop Product FamilyWebLogic PortalWebLogic ServerGerald Nunn门户储存库构建系统依赖项
文章工具
推荐给朋友 推荐给朋友
打印文章 打印文章

  本文旨在说明如何使用Apache Maven 2项目来为BEA WebLogic Portal创建构建系统。Maven是一种广泛应用于Apache项目的开源构建系统。它提供了许多Ant所不具备的功能,其中最为引人注目的当属依赖项管理功能。关于Maven和Ant之间的争论一直以来都很激烈,本文不会探讨这一问题,而是重点介绍WebLogic Portal和Maven 2协同工作的问题。

  本文主要针对了解Maven 2以及熟悉其基本功能的用户。如果您之前没有接触过Maven,请首先阅读免费电子书 Better Builds with Maven 2

安装Maven

  首先,从Maven网站http://maven.下载并安装Maven 2。Maven程序可以安装在任何文件系统中,但是最好不要安装在特定项目目录下,因为不同的项目可能都需要调用Maven程序。

  安装好Maven后,接下来就要创建命令文件以初始化Maven环境。举例如下;尽管在Linux或Solaris系统中创建同样文件也很简单,但该文件主要面向Windows系统。

set BEA_HOME=C:\bea92
set M2_HOME=C:\java\maven-2.0.4
set JAVA_HOME=%BEA_HOME%\jdk150_04
set path=%JAVA_HOME%\bin;%path%;%M2_HOME%\bin
mvn --version

  该脚本设置了某些需要应用于构建环境的环境变量。很明显,您应该通过改变BEA_HOME、JAVA_HOME和M2_HOME的变量值来反射特定环境。为了确保脚本的正确性,在结束处运行了Maven 版本命令。这个命令显示了当前所使用的Maven的版本。

创建Maven储存库

  Maven的一个关键功能就是依赖项管理。一个依赖于某种资源的构件声明了一个在Maven build文件中的依赖项,同时定义了依赖项的组、名称以及版本。在调用构件时,Maven通过从库中获取必要的资源来处理资源依赖项。为了简化处理过程,Maven 在http://repo1./maven2 保留了一个大型储存库,其中包含了大多数像Spring这样的流行开源框架。

  令人遗憾的是,为了避免侵犯版权和许可协议,该储存库不能承载商业资源,例如WebLogic库等。因此,接下来需要把WebLogic库安装在本地储存库中。开发者很可能在刚开始的时候,会不假思索去尝试使用系统级作用域来访问文件系统中的资源,但是不久就会意识到在共享库时,这样做是徒劳的。另外需要强调的是,这种做法与Maven的理念背道而驰,所以最好不要尝试这样做。

  安装单机版JAR

  在BEA主目录下安装单机版JAR很简单。下面是从一段脚本中摘录的样本行,它展示了如何通过使用Maven安装插件和install-file goal来进行安装。出于简洁期间,这里仅仅显示了一行;完整的脚本在示例代码中。这段脚本假定为您正在使用WebLogic Portal v9.2。如果您已经安装MP1或更新的版本,建议在脚本中更新相应的版本号。

mvn install:install-file
-Dfile=%BEA_HOME%\weblogic92\server\lib\weblogic.jar
-DgroupId=weblogic-server
-DartifactId=weblogic
-Dversion=9.2.0
-Dpackaging=jar
-DgeneratePom=true

  Maven的资源保存在一个储存库中,这个储存库有组标识符、工件标识符以及版本号。组标识符用于组合类似的工件。在上面的例子中,我们用 weblogic-server 来组合服务器特定的WebLogic 工件。在下文中我们还会介绍weblogic-Portal和weblogic-common组。工件标识符专门用于标识特定的工件。为保证清晰明了,我们建议用JAR的名称来命名工件标识符。

  要注意的是,本文重点讨论的是组和工件标识符。开发者可以随意使用分层和命名约定,但是任何变动必须在本文论及到的所有构建工件中反映出来。

  一旦WebLogic 资源放入库后,在Maven项目目标模型(POM) 中引用资源就变得很简单。至于先前在储存库中安装 weblogic.jar 的例子,我们可以在pom.xml中创建一个依赖项,如下所示:

<dependency>
<groupId>weblogic-server</groupId>
<artifactId>weblogic</artifactId>
<version>9.2.0</version>
<scope>provided</scope>
</dependency>

  要注意,组和工件标识符以及版本就是我们在Maven储存库中安装weblogic.jar的内容。而假定作用域仅仅表明资源在运行时提供,并且仅仅用于编译目的。

使用共享库

  很遗憾,我们现在面临着一个更为艰难的挑战,就是要将WebLogic共享库安装在储存库中。一个共享库可以是一份Web或企业文档,其在运行时内与与应用程序归并。应用程序在EAR 的weblogic-application.xml或WAR的weblogic.xml中声明基于共享库的依赖项。这些共享库包含了诸如JAR的大量文件资源。

  麻烦的是,Java编译器javac不能从共享库中提取JAR文件来完成编译。在WebLogic Workshop中有一个插件能够将所有共享库扩展到一个插件目录下,这样JAR文件就能被编译器识别处理。

  在Maven中,要访问共享库,我们需要将每个共享库中的工件 安装到储存库中。为了实现这个目标,我在本文中编写了一个命名为maven-weblogic-library-plugin 的maven小插件。除了在储存库中安装一个或多个共享库以外,这个插件和Maven中安装的插件功能类似。下例说明了它的执行方式:

mvn weblogic-maven:maven-shared-library-plugin:install-library
-DgroupId=weblogic-portal
-Ddirectory=%BEA_HOME%/weblogic92/portal/lib/modules
-DdefaultVersion=9.2.0

  这个插件既可以通过-Dlibrary指令安装一个单独的共享库,也能将所有的库安装在指定的目录下,就像上面显示的一样。以上指定的groupId是一个根组,共享库就安装在里面。插件程序能自动为文件库工件创建一个二级组,而且库的工件与库本身同名。在这个二级组中,共享库中的每一个工件将和库本身的副本一起安装。最后,创建一个母项目目标模型(POM)工件,以便创建库中所有工件的依赖项。这样在配置build时,就减少了为每一个工件创建依赖项的工作量。

版本控制

  maven-weblogic-library-plugin插件允许开发人员指定共享文件库的默认版本。当共享库名称不包含版本号时,我们就可以用插件来指定版本。如果安装了一个例如beehive-controls-1.0.ear的共享库,版本号就可以从名称中提取(如本例中为1.0),而不是来自于默认版本号。

创建 maven-weblogic-library-plugin 插件

  可以进入示例代码中的/maven/maven-weblogic-library-plugin文件夹并执行mvn:install之前的mvn:package命令来创建新的插件文件。切记一定要先用前文论述的内嵌的maven.bat文件来初始化Maven环境。

安装共享库

  有了插件文件,下一步就要将所有的共享库安装在储存库中。示例代码中有一段脚本install-weblogic-libraries.bat,它向我们说明了应该如何实现这一任务。

  正如先前论述的一样,一旦共享库安装完毕,我们就可以通过已由插件创建好的母POM将依赖项添加进来。比方说要声明一个p13n-app-lib.ear 共享库中的依赖项,我们就可以在pom.xml中使用下述依赖项声明:

<dependency>
<groupId>weblogic-common.p13n-app-lib</groupId>
<artifactId>p13n-app-lib-parent</artifactId>
<version>9.2.0</version>
<type>pom</type>
<scope>provided</scope>
</dependency>

创建项目目标模型

  准备工作完成后,就可以创建POM文件并且应用Maven来构建我们想要的门户应用程序了。但是首先,关于WebLogic 工作平台下门户项目架构还要强调一点是,Maven是一款基于惯例优先理念的软件工具;这意味着它认为一切都是按照某种方式而布置。至于门户项目结构,Maven具有一种针对Java 和 Web项目的结构,建议尽可能使用这种结构。

  使用Maven的结构很方便;创建WebLogic门户WAR时,只要指定下图所示的资源路径和Web内容目录即可。请注意这是建议结构,如果您现在的项目正在使用默认路径,您仍然可以配置Maven来创建该项目。但是,还需要在POM中进行额外的配置以传达Maven路径的变动。

使用Maven 2创建WebLogic Portal应用程序图-1

  图1.. Eclipse New Portal Web Project对话框

  至于WebLogic门户EAR,默认结构可以在Maven中正常运行,无需任何变动。

  最后,关于项目结构我们强烈建议创建一个新的项目并且将该项目的源代码放在工作空间以外的单独目录下。由于无需检查多余的工作空间工件,这将使得源代码控制管理更为容易。下方的样本结构图可说明这一点:

使用Maven 2创建WebLogic Portal应用程序图-2

  图2:项目结构示例.

  现在我们就可以为应用程序的各个部分创建POM文件了。POM文件总共有三种,在下文我们会对之进行论述。请记住示例代码中包含每个POM的完整版本;这样我们只需在下文重点讲述每个POM的主要方面,特别是与创建WebLogic 门户应用程序有关的方面。在Maven站点中有很多关于如何创建和使用POM的文章,这里就不再赘述了。

父POM

  第一个要创建的POM是父POM。有了父POM,我们既可以创建EAR,也可以创建WAR作为一个单元,同时允许集中设置。在Maven中,每一个工件,比如EAR和WAR,是单独的实体。您可以将它构建并部署为一个单元。

  在这个父POM中,我们为portalEAR和portalWAR项目声明模块。如下所示:

<modules>
<module>portalEAR</module>
<module>portalWAR</module>
</modules>

  这项声明使我们能够同时创建两个项目。这样做只是为了方便,而并非是必需的,因为portalEAR在POM中也声明了一个基于portalWAR的依赖项。因此,如果之前没有创建war文件,Maven会自动创建。

  接下来,就要设置maven-compiler-plug-in以使 target JDK 5为编译做好准备。如下所示:

<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>

Web应用程序POM

  Web应用程序POM可用来创建以portalWAR项目为代表的WAR。总的来说,创建WebLogic portal WAR与创建一个标准的Java EE WAR没什么两样。但是,假若WebLogic门户应用程序使用颇具代表性的页面流和Beehive注释,我们当然要做到支持注释。

  JDK包含了一个注释处理工具(APT),而Maven 2中的maven-apt-plugin插件也配有这样的工具,可以在 这里 找到它。在撰写本文时,maven-apt-plugin插件中还存在一些小问题,导致其不能在WebLogic 门户应用程序中顺畅运行。我已经将纠正这些缺陷的补丁放进了示例代码中,只需在maven-apt-plugin目录下运行mvn:package和mvn:install命令既可安装。为了避免版本冲突,用-BEA给该版本作了标记。

  出于本文发布时间的原因,maven-apt-plugin 已经得到了纠正并且对发现的缺陷也进行了修改。这样就可以选择使用本文中的插件或是maven-apt-plugin的快照版本。如果您在使用maven-apt-plugin的快照版本,那就不再需要sourcePath配置选项,可以从portalWAR 项目中的pom.xml中删除。

  用Maven来处理注释很简单,POM中的该部分功能具体如下:

<plugin>
<groupId>org.apache.myfaces.tobago</groupId>
<artifactId>maven-apt-plugin</artifactId>
<version>1.0.10-BEA</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<generated>.apt_generated</generated>
<aptOptions>
x=3,
web.content.root=${basedir}/src/main/webapp
</aptOptions>
<target>1.5</target>
<nocompile>true</nocompile>
<showWarnings>true</showWarnings>
<verbose>false</verbose>
<fork>false</fork>
<sourcePath>${basedir}/src/main/java</sourcePath>
</configuration>
</execution>
</executions>
</plugin>

  其中最关键的一点就是将web.content.root属性指向Web内容源目录,因为Beehive注释处理器需要调用该参数。另一个重要参数是sourcePath。因为APT工具需要调用sourcePath,该参数被添加到了打过补丁的maven-apt-plugin插件。

  最后一个关键点就是各种WebLogic Server和WebLogic Portal库以及共享库的依赖项。它们在POM的最底层,通过下载示例代码可以进行查看。

企业级应用程序POM

  portalEAR项目中的POM大致上是一个标准的POM,可以被任何Java EE应用程序调用。配置maven-ear-plugin如下:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<configuration>
<displayName>
Portal Maven2 Sample Application
</displayName>
<description>
Portal Maven2 Sample Application
</description>
<version>1.4</version>
<earSourceDirectory>EarContent</earSourceDirectory>
<earSourceExcludes>**/application.xml</earSourceExcludes>
<modules>
<webModule>
<groupId>portal-maven2-sample</groupId>
<artifactId>portalWAR</artifactId>
<contextRoot>/portalWAR</contextRoot>
</webModule>
</modules>
</configuration>
</plugin>

  这里唯一要强调的一点是,这里不包含application.xml文件,我们需要让Maven生成该文件。这样做很有必要,因为依照Maven的规则,在生成一个带附加版本号的portalWAR的同时,Maven还将生成application.xml以确保模块名称是正确的。

创建应用程序

  既然现在一切都准备就绪,创建门户应用程序就变得易如反掌,只要在/应用程序目录下运行mvn:package命令即可。如果您查看portalWAR和portalEAR文件夹下的目标目录,就可以分别看到WAR和EAR的副本。

示例代码

  本文提供了一份文档,该文档包含了一个示例WebLogic门户应用程序。所有使用Maven 2构建应用程序所需的资源都包含在里面。要使用该示例,只需打开该文档包并确保路径被保留,然后修改maven/scripts/maven.bat文件使之指向BEA以及Maven主目录所在的位置即可。

  教学示例代码(zip)

概述

  只需付出一点努力,用户就可以使用Maven 2来创建WebLogic门户应用程序。Maven 2 中大量的功能使之成为众多机构的选择。相信本文能够帮助众多用户来实现Maven 2和WebLogic的集成。

  资源

 作者简介
Gerald Nunn 是BEA Systems Professional Services的业务首席顾问。他已经结婚了,有一个4岁的儿子,生活在加拿大多伦多北部的纽马基特小镇。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多