我目前正在使用IBM Rational Application Development(IBM Eclipse发行版)进行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自己的复制实用程序。
如果有人建议如何集成Maven和IBM RAD以进行WebSphere Portlet开发,请随时添加更多答案。
由于
答案 0 :(得分: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,但它有助于实现它的目的。根据需要添加依赖项。
答案 1 :(得分:1)
我有同样的问题和集成Maven和RAD的问题。我正在使用带有m2e的RAD 8并尝试为WebSphere Portal 7自动部署/调试portlet。
首先,关于Gorkem的评论:
我不确定这是否适用于IBM RAD,但使用Eclipse WTP,您可以从项目属性中定义部署程序集。
这在RAD中有效。我已经设置了我的项目的部署程序集以匹配WebSphere构建结构并将我的Maven依赖项移动到WEB-INF \ lib文件夹中(项目 - &gt;属性 - &gt;部署程序集 - &gt;添加 - &gt; Java构建路径条目 - &gt ; Maven Dependencies)。
这个配置允许我成功构建战争,我可以从RAD导出生成的EAR文件并手动将其部署到我的本地服务器,它工作正常。但是,自动部署和“在服务器上运行”选项不能单独使用它。由于某种原因,它会将所有传递依赖(portlet-api,servlet-api等)部署到WebSphere,从而导致冲突和爆炸。
因此,我尝试了McDowell提出的pom解决方案,取得了有限的成功 - 它不能正确编译或运行我的测试,但是当我删除测试时它确实从RAD成功部署了。我正在使用他的pom进行测试,并在我开始工作时将结果发布在这里。
我还发现this thread包含指向2010 IBM document的链接,用于整合Maven和RAD的“官方”方式。我正在努力,并将看到哪种解决方案更符合我的需求。再说一次,如果/当我有它工作,我会在这里发布更多信息。
2011年11月21日更新
IBM已经为Maven / RAD集成制作了一个更新的文档。你可以找到它here。我已经完成了它并且做得非常好。它是一步一步的截图和Maven,M2eclipse和WTP的一些背景知识。 Chuck在论文中描述了一些烦恼,但最终,它允许我们的团队在WebSphere Portal环境中开始使用Maven而不放弃Maven约定。希望其他人会发现它很有用。