9

我目前正在使用 IBM Rational Application Development (IBM Eclipse distro) 进行 Portlet 开发,并且在 Maven 集成方面遇到了一个小问题。

情况如下:

1) IBM RAD 能够直接从内部部署 Portlet (RUN/DEBUG)

在这种情况下,我根本没有使用 Maven 生成的 WAR,因为 IBM RAD 似乎自己自动创建 WAR 并将其推送到 IBM WebSphere Portal。到目前为止,这没什么大不了的。

2)Maven依赖没有复制到WebContent/WEB-INF/lib目录下

IBM 有自己的目录结构:WebContent/WEB-INF 和 WebContent/META-INF。如果我更新 pom.xml 以包含新的依赖项,这些 JARS 将不会被复制到 WebContent/WEB-INF/lib 目录,因此当我想运行/调试 portlet 时,这些库将不会被包含在内。

问题:

有没有办法在我更新 pom.xml 后立即将新的 JAR 自动复制到 WebContent/WEB-INF/lib 文件夹?(如果是,这应该在哪个生命周期中?)

如果问题 #1 没有完美的解决方案,我不介意此步骤是否包含在“mvn install”编译/目标中。

不喜欢使用 ant-task,而是使用 maven 自己的复制实用程序(如果存在)。

如果有人对如何为 WebSphere Portlet 开发集成 Maven 和 IBM RAD 提出建议,请随时添加更多答案。

谢谢

4

2 回答 2

2

这是我从旧 RAD 项目中挑选的 Maven 2 pom.xml 骨架:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>foo</groupId>
  <artifactId>fooproject</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <properties>
    <project.build.sourceEncoding>US-ASCII</project.build.sourceEncoding>
  </properties>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <resources>
      <resource>
        <directory>src</directory>
        <includes><include>**/*.properties</include></includes>
        <filtering>true</filtering>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.1</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1-beta-1</version>
        <configuration>
          <webappDirectory>${project.basedir}/WebContent</webappDirectory>
          <warSourceDirectory>${project.basedir}/WebContent</warSourceDirectory>
          <webXml>${project.basedir}/WebContent/WEB-INF/web.xml</webXml>
          <packagingIncludes>**/*.properties,**/*.jsp,**/*.jar,**/*.class,theme/**/*,images/**/*,**/*.xml,**/*.swf,**/*.tld,**/*.txt</packagingIncludes>
          <archive>
            <manifest>
              <addClasspath>true</addClasspath>
            </manifest>
          </archive>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <!-- compile classpath -->
  </dependencies>
</project>

这适用于由 RAD 创建的目录结构(版本 7.5,针对 WAS 7 上的 Portal 6.5.x)。这不是唯一的方法,我相信 pom 可以改进,但它达到了它的目的。根据需要添加您的依赖项。

于 2011-01-31T11:41:34.287 回答
1

我在集成 Maven 和 RAD 时遇到了同样的问题。我将 RAD 8 与 m2e 一起使用,并尝试为 WebSphere Portal 7 自动部署/调试 portlet。

首先,关于 Gorkem 的评论:

我不确定这是否适用于 IBM RAD,但使用 Eclipse WTP,您可以从项目属性中定义部署程序集。

这在 RAD 中确实有效。我已经设置了项目的部署程序集以匹配 WebSphere 构建结构并将我的 Maven 依赖项移动到 WEB-INF\lib 文件夹(项目 -> 属性 -> 部署程序集 -> 添加 -> Java 构建路径条目 -> Maven 依赖项)。

在此处输入图像描述

这个配置确实让我能够成功构建战争,我可以从 RAD 导出生成的 EAR 文件并手动将其部署到我的本地服务器,它工作正常。但是,自动部署和“在服务器上运行”选项不能单独使用。出于某种原因,它会将所有传递依赖项(portlet-api、servlet-api 等)部署到 WebSphere,这会导致冲突和爆炸。

因此,我尝试了 McDowell 提出的 pom 解决方案,但成功有限——它无法正确编译或运行我的测试,尽管当我删除测试时它确实从 RAD 成功部署。我正在使用他的 pom 来进行测试,当我开始工作时,我会在这里发布我的结果。

我还发现了这个线程,其中包含一个2010 IBM 文档的链接,该文档以“官方”方式集成 Maven 和 RAD。我正在研究它,并会看到哪种解决方案更能满足我的需求。同样,如果/当我让它工作时,我会在这里发布更多信息。


2011 年 11 月 21 日更新

IBM 为 Maven/RAD 集成制作了更新的文档。你可以在这里找到它。我已经完成了它,它做得很好。它是一步一步的截图和一些关于 Maven、M2eclipse 和 WTP 的背景知识。Chuck 在论文中描述了一些烦恼,但最终,它允许我们的团队开始在 WebSphere Portal 环境中使用 Maven,而无需放弃 Maven 约定。希望其他人会发现它有用。

于 2011-07-08T18:28:15.453 回答