2011-01-28 45 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。希望別人會覺得它有用。