2012-08-14 8 views
18

Z powodzeniem używam mvn tomcat7-maven-plugin:run -am -pl :foo do uruchomienia pojedynczego projektu na raz w Tomcat like is shown here. Teraz chciałbym mieć wiele modułów uruchamianych pod tym samym portem, ale w różnych kontekstach. Na przykład, chciałbym mieć:Jak korzystać z maven plugin tomcat7: uruchomić z wieloma kontekstami (WAR)?

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

Oto przykład pom.xml snippet że pracuję z:

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

Czy to możliwe dzięki wtyczce tomcat7-maven-plugin:run? Staram się znaleźć poprawną składnię, aby dobrze się z nią grało. Po uruchomieniu polecenia maven uruchamia ono tylko pierwszą znalezioną w hierarchii projektu. A jeśli uruchomię je z <fork>true</fork> lub oczywiście z różnych terminali, otrzymam "java.net.BindException: Address already in use: 8080".

Odpowiedz

1

Zastosowanie coś

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

Zakładam, że jest to część konfiguracji, która definiuje kontekst uruchamiany w bieżącym module jako root? to znaczy, w jaki sposób dodać moje "bar.war" jako "/ bar" do pliku pom.xml mojego "foo.war" jako "/"? To nie działa bezpośrednio z powodu zależności, ale wciąż z nim gram. – mckamey

+0

Nie mogę sprawiać wrażenia, że ​​radzę sobie z zależnościami "bar.war". Próbowałem wyraźnie dodawać je tak jak ten http://stackoverflow.com/a/9928987/43217, ale bez powodzenia. – mckamey

+0

Ponadto, jeśli spróbuję dodać "bar.war" jako zależność zakresu "tomcat" do samego modułu, wówczas kompiluje on najpierw, a komenda tomcat7: run próbuje wykonać to zamiast tego. – mckamey

19

Jak już sugeruje, użyj <webapps> sekcję konfiguracji wtyczki, ale dodać dodatkowy parametr <asWebapp>true</asWebapp> dla każdego webapp, tj:

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

Te dodatkowe webapps są wdrażane ze ścieżką kontekstową ${artifactId} domyślnie.

Wygląda na to, że bez tego parametru dodatkowe aplikacje internetowe zostaną porzucone po cichu, gdy uruchomisz coś w rodzaju mvn tomcat7:run (wypróbowano na stabilnej wersji 2.0). Related Jira issue mówi, że zostało zrobione dla "zgodności wstecznej".

+0

Hej - tylko uwaga na ten, który może pomóc komuś innemu ... Ta rada Vasyl rozwiązała mój problem, ale musiałem uaktualnić tomcat7-maven-plugin do 2.0 z 2.0-beta-1, zanim to zadziała. Wystąpił błąd w tej wersji sprzed 2.0, która uniemożliwiała działanie aplikacji sieciowych: https://issues.apache.org/jira/browse/MTOMCAT-169 –

+0

Czy istnieje sposób na zastąpienie ścieżki kontekstowej aplikacji webapp przy użyciu tego podejścia ? – hoshposh

+4

@hoshposh Widzę parametr 'contextPath' w klasie wtyczki' org.apache.tomcat.maven.common.config.AbstractWebapp', więc dodawanie czegoś takiego jak ' ... /mypath ...' powinno praca. –