web-dev-qa-db-ja.com

MavenプラグインTomcat7:runを複数のコンテキスト(WAR)で使用する方法は?

私はmvn Tomcat7-maven-plugin:run -am -pl :fooを使用して、一度に1つのプロジェクトのみを正常に実行しています Tomcatのようなものをここに示します 。ここで、複数のモジュールを同じポートで異なるコンテキストで実行したいと思います。たとえば、私は欲しいです:

/    => 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」が表示されます。

19
mckamey

すでに提案されているように、プラグイン構成の<webapps>セクションを使用しますが、すべてのWebアプリにパラメーター<asWebapp>true</asWebapp>を追加します。

<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> 

これらの追加のWebアプリは、デフォルトで${artifactId}コンテキストパスを使用してデプロイされます。

このパラメーターがないと、mvn Tomcat7:run(安定バージョン2.0で試してみました)のようなものを実行すると、追加のWebアプリがサイレントに破棄されるようです。 関連するJiraの問題 「下位互換性」のために行われたことを示します。

20
Vasyl Shchukin

次のようなものを使用します

  <configuration>
    <webapps> 
      <webapp> 
        <groupId>com.company</groupId> 
        <artifactId>mywebapp</artifactId> 
        <version>1.0</version> 
        <type>war</type>    
      </webapp> 
    </webapps> 
  </configuration>
1
Olivier Lamy