2015-09-19 27 views
2

我有一個原始的java web應用程序(因此產生一個WAR文件),這是一個Maven管理的,我們稱之爲webapp如何將Maven工件用作另一個工件(或模塊)的輸入?

我喜歡保持其Maven配置原樣,但有時我需要通過操縱其內容(或者對其應用通用操作)產生WAR的後期製作。

所以我做了一個多模塊項目:

- multimodule 
    +-- webapp 
    +-- operator 

operator可以做幾件事情。例如,它調用一個(JAVA)命令行程序來對WAR進行一些檢查:如何獲取'webapp'模塊輸出(即WAR文件)並將其設置爲operator模塊的輸入?

我不知道如何做到這一點,也沒有在網上搜索什麼,所以我卡住了。

回答

1

您需要將webapp作爲operator項目的依賴項。的operator

樣品POM:

<?xml version="1.0" encoding="UTF-8"?> 
<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/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <packaging>jar</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <groupId>my-groupid</groupId> 
    <artifactId>operator</artifactId> 
    <dependencies> 
     <dependency> 
      <groupId>my-groupid</groupId> 
      <artifactId>webapp</artifactId> 
      <version>${project.version}</version> 
      <type>war</type> 
     </dependency> 
    </dependencies> 
</project> 

通過創建一個顯式依賴,Maven會構建WebApp在反應器中operator項目之前,你就可以進行後期處理那場戰爭。

讓我們舉一個例子,考慮你想調用一個以這場戰爭爲參數的程序。

首先,這個新的依賴關係必須被複制到一個特定的位置。這是通過maven-dependency-plugin完成的。這個插件的目標是copy-dependencies,它用於將項目的所有直接依賴關係複製到文件系統中的某個位置。示例配置爲:

<plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.10</version> 
    <executions> 
     <execution> 
      <id>copy-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${project.build.directory}/libs</outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
<plugin> 

現在依賴可在文件系統中,您可以運行使用exec-maven-plugin的程序。示例配置,推出operator -param1 webapp.war

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.4.0</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>exec</goal> 
      </goals> 
     </execution> 
     <configuration> 
      <executable>operator</executable> 
      <workingDirectory>${project.build.directory}/libs</workingDirectory> 
      <arguments> 
       <argument>-param1</argument> 
       <argument>webapp.war</argument> 
      </arguments> 
     </configuration> 
    </executions> 
</plugin> 
+0

是的,謝謝。但是,我的疑惑出現在這裏:我怎麼繼續?例如,假設'operator'是一個應該像這樣調用的程序:'operator -param1 webapp.war',我應該在'operator' POM中做些什麼? – watery

+0

@watery我用一個例子編輯了我的答案 – Tunaki

+0

很好!還有一件事:因爲'webapp.war'是由一個依賴項構成的,我可以通過一個屬性或其他動態的方式來獲取它,這樣我就不必每次修改''文本,例如,依賴版本? – watery

0

看看maven profiles

您應該能夠定義兩個配置文件並配置第二個配置文件來執行其他操作。如果你遵循這種方法,你將不需要兩個模塊。

+0

其實,我的設置是有一點不同:我的主要目標是兩個類似的WAR傳遞給外部程序(我在這裏簡單),因此一個模塊爲他們每個人是必須的;另外,我想讓每個WAR構建配置與附加和可變操作分開,所以我認爲配置文件不適合這裏。 – watery

相關問題