2011-01-28 73 views
9

我目前正在使用IBM Rational Application Development(IBM Eclipse发行版)进行Portlet开发,并且在Maven集成中遇到了一个小问题。Maven在添加依赖项时复制JAR

这里的情况:

1)IBM RAD有直接从其内部(运行/调试)

在这种情况下部署的Portlet的能力,我没有使用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和IBM RAD集成到WebSphere Portlet开发中,请随时添加更多答案。

感谢

+0

我不知道这是IBM RAD,但与Eclipse WTP可以从项目属性定义部署组装件。 – 2011-01-30 11:14:51

回答

2

下面是一个Maven 2 pom.xml的骨架我挑了一个老RAD项目:

<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上的6.5.x)。这不是唯一的方法,我相信这个POM可以改进,但它达到了它的目的。根据需要添加您的依赖关系。

+0

非常感谢。像魅力一样工作。 – xandross 2011-01-31 18:00:35

1

我有同样的问题和问题集成Maven和RAD。我使用RAD 8 M2E,并试图为WebSphere Portal 7

首先自动部署/调试的portlet,以Gorkem的评论:

我不知道这是IBM RAD但Eclipse WTP可以从项目属性中定义部署装配件。

这在RAD工作。我已经安装了我的项目的部署程序集以匹配WebSphere构建结构,并将我的Maven Dependencies移动到WEB-INF \ lib文件夹(Project - > Properties - > Deployment Assembly - > Add - > Java Build Path Entries - > Maven Dependencies)。

enter image description here

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

因此,我试图用有限的成功提出了麦克道尔的POM的解决方案 - 它不会编译也不正确运行我的测试中,虽然当我删除的测试中,它的确从RAD成​​功部署。我正在努力工作,包括测试,并会在我工作的时候在这里发布我的结果。

我还发现this thread其中包含指向集成Maven和RAD的“官方”方式的2010 IBM document的链接。我正在通过它,并会看到哪个解决方案更好地满足我的需求。再次,如果/当我有它的工作,我会在这里发布更多的信息。


更新2011年11月21日

IBM已经产生了对Maven/RAD集成的更新文件。你可以找到它here。我已经完成了它,并且做得很好。它在Maven,M2eclipse和WTP的屏幕截图和一点背景上分步。 Chuck在论文中描述了一些烦恼,但最终它允许我们的团队在不放弃Maven约定的情况下开始在WebSphere Portal环境中使用Maven。希望别人会觉得它有用。

相关问题