2012-08-14 33 views
18

Tôi đã sử dụng mvn tomcat7-maven-plugin:run -am -pl :foo thành công để chỉ chạy một dự án tại một thời điểm trong Tomcat like is shown here. Bây giờ tôi muốn có nhiều mô-đun chạy dưới cùng một cổng nhưng các ngữ cảnh khác nhau. Ví dụ, tôi muốn có:Làm thế nào để sử dụng maven plugin tomcat7: chạy với nhiều ngữ cảnh (WAR)?

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

Dưới đây là một ví dụ pom.xml đoạn mã mà tôi đã làm việc với:

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

Đây có phải là có thể với các plugin tomcat7-maven-plugin:run? Tôi đang đấu tranh để tìm cú pháp chính xác để làm cho nó hoạt động tốt. Khi tôi chạy lệnh maven để chạy nó, nó chỉ chạy lệnh đầu tiên mà nó tìm thấy trong hệ thống phân cấp dự án. Và nếu tôi chạy chúng với <fork>true</fork> hoặc rõ ràng từ các thiết bị đầu cuối khác nhau thì tôi nhận được "java.net.BindException: Địa chỉ đã được sử dụng: 8080".

Trả lời

1

Sử dụng một cái gì đó giống như

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

Tôi giả định rằng đó là một đoạn cấu hình để xác định ngữ cảnh chạy trong mô đun hiện tại dưới dạng gốc? tức là, đó có thể là cách thêm "bar.war" của tôi thành "/ bar" vào tệp pom.xml của "foo.war" của tôi là "/"? Nó không hoạt động trực tiếp vì phụ thuộc nhưng tôi vẫn chơi với nó. – mckamey

+0

Tôi dường như không thể xử lý các phụ thuộc của "bar.war". Tôi đã cố gắng thêm chúng một cách rõ ràng như thế này http://stackoverflow.com/a/9928987/43217 nhưng không may mắn. – mckamey

+0

Ngoài ra, nếu tôi cố gắng thêm "bar.war" như là một phụ thuộc của phạm vi "tomcat" vào mô-đun chính nó, sau đó nó xây dựng đầu tiên và tomcat7: chạy lệnh cố gắng thực hiện nó thay thế. – mckamey

19

Vì nó đã được đề nghị, sử dụng <webapps> phần của cấu hình plugin, nhưng bổ sung thêm tham số <asWebapp>true</asWebapp> cho mỗi ứng dụng web, ví dụ:

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

Những webapps thêm được triển khai với ${artifactId} đường dẫn ngữ cảnh theo mặc định.

Có vẻ như không có thông số này, các ứng dụng web bổ sung sẽ bị loại bỏ âm thầm khi bạn chạy một cái gì đó như mvn tomcat7:run (thử trên phiên bản ổn định 2.0). Related Jira issue cho biết nó đã được thực hiện cho "khả năng tương thích ngược".

+0

Hey - chỉ cần một lưu ý trên này có thể giúp đỡ người khác ... Lời khuyên này của Vasyl giải quyết vấn đề của tôi, nhưng tôi đã phải nâng cấp tomcat7-maven-plugin 2.0 từ 2.0-beta-1 trước khi nó sẽ làm việc. Có một lỗi trong bản phát hành trước 2.0 đã ngăn các ứng dụng web hoạt động: https://issues.apache.org/jira/browse/MTOMCAT-169 –

+0

Có cách nào để ghi đè đường dẫn ngữ cảnh cho webapp bằng cách tiếp cận này hay không ? – hoshposh

+4

@hoshposh Tôi thấy tham số 'contextPath' trong lớp của plugin' org.apache.tomcat.maven.common.config.AbstractWebapp', vì vậy hãy thêm một số thứ như ' ... /mypath ...' nên công việc. –

Các vấn đề liên quan