2012-08-14 70 views
18

我一直使用mvn tomcat7-maven-plugin:run -am -pl :foo成功地在Tomcat like is shown here一次只運行一個項目。現在我想讓多個模塊在相同的端口但不同的環境下運行。舉例來說,我想有:如何使用maven插件tomcat7:運行多個上下文(WARs)?

/ => foo.war 
/bar => bar.war 

下面是一個例子pom.xml的代碼段中我一直在工作:

<project><!-- ... --> 
    <build><!-- ... --> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.tomcat.maven</groupId> 
        <artifactId>tomcat7-maven-plugin</artifactId> 
        <version>2.0-SNAPSHOT</version> 
        <configuration> 
         <path>/</path> 
         <port>8080</port> 
         <addContextWarDependencies>true</addContextWarDependencies> 
         <addWarDependenciesInClassloader>true</addWarDependenciesInClassloader> 
         <warSourceDirectory>${project.build.directory}/${project.build.finalName}/</warSourceDirectory> 
        </configuration> 
        <dependencies> 
         <dependency> 
          <groupId>${project.groupId}</groupId> 
          <artifactId>bar</artifactId> 
          <version>${project.version}</version> 
          <type>war</type> 
          <scope>tomcat</scope> 
         </dependency> 
        </dependencies> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>apache.snapshots</id> 
      <name>Apache Snapshots</name> 
      <url>http://repository.apache.org/content/groups/snapshots-group/</url> 
      <releases> 
       <enabled>false</enabled> 
      </releases> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </pluginRepository> 
    </pluginRepositories> 
</project> 

這可能與tomcat7-maven-plugin:run插件?我正在努力尋找正確的語法來讓它發揮出色。當我運行maven命令來運行它時,它只運行它在項目層次結構中找到的第一個命令。如果我運行他們的<fork>true</fork>或顯然來自不同的終端,那麼我會得到「java.net.BindException:地址已在使用:8080」。

回答

1

使用類似

<configuration> 
    <webapps> 
     <webapp> 
     <groupId>com.company</groupId> 
     <artifactId>mywebapp</artifactId> 
     <version>1.0</version> 
     <type>war</type>  
     </webapp> 
    </webapps> 
    </configuration> 
+0

我假設這是一個配置塊來定義作爲根在當前模塊內運行的上下文?也就是說,如何將我的「bar.war」添加爲「/ bar」作爲「/」添加到我的「foo.war」的pom.xml中?它沒有直接工作,因爲依賴關係,但我仍然在玩它。 – mckamey 2012-08-15 22:41:06

+0

我似乎無法得到它來處理「bar.war」的依賴關係。我已經嘗試明確地添加它們像這樣http://stackoverflow.com/a/9928987/43217,但沒有運氣。 – mckamey 2012-08-15 23:04:14

+0

此外,如果我嘗試將「bar.war」作爲範圍「tomcat」的依賴項添加到模塊本身,那麼它會先構建,而tomcat7:run命令會嘗試執行它。 – mckamey 2012-08-15 23:23:19

19

因爲它已經建議,使用插件配置的<webapps>部分,但添加附加參數<asWebapp>true</asWebapp>每一個Web應用程序,即:

<webapps> 
    <webapp> 
    <groupId>com.company</groupId> 
    <artifactId>mywebapp</artifactId> 
    <version>1.0</version> 
    <type>war</type>  
    <asWebapp>true</asWebapp> 
    </webapp> 
    <webapp> 
    <groupId>com.company</groupId> 
    <artifactId>mywebapp2</artifactId> 
    <version>2.0</version> 
    <type>war</type>  
    <asWebapp>true</asWebapp> 
    </webapp> 
</webapps> 

這些額外的webapps部署與${artifactId}上下文路徑默認。

看起來像沒有這個參數,當你運行類似mvn tomcat7:run(試用穩定版本2.0)時,其他webapps會被默默丟棄。 Related Jira issue說它是爲了「向後兼容」而完成的。

+0

嘿 - 只是關於這個可能會幫助其他人的一個說明...... Vasyl的這個建議解決了我的問題,但是在它工作之前,我必須將tomcat7-maven-plugin從2.0-beta-1升級到2.0。在2.0之前的版本中存在一個錯誤,它阻止了webapps的工作:https://issues.apache.org/jira/browse/MTOMCAT-169 – 2013-02-08 05:15:51

+0

有沒有一種方法可以用這種方法覆蓋webapp的上下文路徑? – hoshposh 2013-03-07 14:27:47

+4

@hoshposh我在插件的類'org.apache.tomcat.maven.common.config.AbstractWebapp'中看到'contextPath'參數,所以添加類似' ... /mypath ...'應該工作。 – 2013-03-13 14:39:58

相關問題