2009-03-12 35 views
18

Tôi có một bộ ứng dụng web mà tôi quản lý mà tôi đang cố di chuyển đến maven.Làm cách nào để triển khai nhiều ứng dụng web ngang hàng từ cha mẹ pom

 
/pom.xml   // parent pom 
webapp1/pom.xml // configured to point to parent 
webapp2/pom.xml // peer of webapp1 and points to parent. 

mỗi ứng dụng web đề cập đến pom mẹ và cả hai đều có plugin maven cầu nối hoạt động.

Câu hỏi của tôi là làm cách nào để gắn kết từng ứng dụng web từ pom mẹ sao cho mvn jetty: chạy hoạt động trong thư mục chính?

chỉnh sửa thành anwer: Pascal T Vấn đề không quá lớn khi tôi thử và chạy lệnh từ pom gốc, nhưng tôi không biết cách cấu hình nó như thế nào.

ví dụ như webapp1/pom.xml trông giống như:

<project> 
... 
<plugins> 
    <plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>maven-jetty-plugin</artifactId> 
    </plugin> 
</plugins> 
... 
</project> 

thay đổi này cầu cảng thư mục và gõ mvn: chạy chỉ hoạt động tốt và dành cho tôi những khả năng để đạt: http://localhost:8080/webapp1.

Tuy nhiên, những gì tôi muốn sẽ ở trong trang gốc của webapp1 và chạy tất cả các ứng dụng web 'n' từ thư mục mẹ. Vì vậy, có http://localhost:8080/webapp1http://localhost:8080/webapp2 có sẵn với một tham số dòng lệnh.

btw, nếu câu trả lời liên quan đến plugin tomcat, điều đó sẽ ổn.

+0

Tôi hiểu rõ hơn những gì bạn muốn làm và đã chỉnh sửa câu trả lời đầu tiên của tôi –

+0

Câu hỏi giống như [Có thể chạy hai ứng dụng web cùng một lúc khi phát triển với Maven/Eclipse?] (Http://stackoverflow.com/questions/5519066/ có thể chạy-hai-webapps-at-once-khi-phát triển-với-maven-eclipse). Câu hỏi này có câu trả lời hay! (Từ @Janning) – stolsvik

Trả lời

10

EDIT: Tôi đã hoàn toàn chỉnh sửa câu trả lời đầu tiên của mình ngay bây giờ để hiểu rõ hơn về những kỳ vọng của OP.

Kiểm tra Cargo, một trình bao bọc mỏng cho phép bạn thao tác các vùng chứa Java EE theo cách tiêu chuẩn.

Thực tế, có tutorial trên trang web của Cargo thể hiện cách sử dụng plugin Cargo Maven2 để tự động khởi động/dừng vùng chứa (có thể triển khai một số triển khai cho nó khi khởi động), đó là những gì bạn đang tìm kiếm những gì tôi đã hiểu.

Tôi không chắc chắn rằng việc thực hiện điều này từ thư mục chính là khả thi và nếu đó là yêu cầu hoặc nếu bạn có thể làm điều đó từ thư mục khác. Tôi sẽ quay lại sau. Cho phép đầu tiên hãy xem thiết lập plugin Cargo Maven2.

Trong trường hợp của bạn, bạn có thể bắt đầu với cấu hình tối thiểu (có sử dụng Jetty 5.x đó là thùng chứa mặc định của Cargo):

[...] 
<build> 
    <plugins> 
    <plugin> 
     <groupId>org.codehaus.cargo</groupId> 
     <artifactId>cargo-maven2-plugin</artifactId> 
    </plugin> 
    </plugins> 
</build> 
[...] 

Nếu bạn muốn sử dụng Jetty 6.x, bạn sẽ phải chỉ định <containerId><type> trong các yếu tố <container>:

[...] 
<plugin> 
<groupId>org.codehaus.cargo</groupId> 
<artifactId>cargo-maven2-plugin</artifactId> 
<configuration> 
    <container> 
    <containerId>jetty6x</containerId> 
    <type>embedded</type> 
    </container> 
</configuration> 
</plugin> 
[...] 

Sau đó, thêm các module bạn muốn triển khai bằng cách định nghĩa deployables rõ ràng bên trong cấu hình plugin (tham khảo các Maven2 Plugin Reference Guide cho các chi tiết của cấu hình):

<deployables> 
    <deployable> 
    <groupId>com.mycompany.myproject</groupId> 
    <artifactId>myproject-alpha</artifactId> 
    <type>war</type> 
    <properties> 
     <context>optional alpha root context</context> 
    </properties> 
    </deployable> 
    <deployable> 
    <groupId>com.mycompany.myproject</groupId> 
    <artifactId>myproject-beta</artifactId> 
    <type>war</type> 
    <properties> 
     <context>optional beta root context</context> 
    </properties> 
    </deployable> 
    [...] 
</deployables> 

với điều này, bạn sẽ có thể bắt đầu Jetty và có webapps của bạn triển khai trên nó với một đơn giản (để chạy từ các dự án có chứa các cấu hình hàng hóa plugin):

$ mvn cargo:start 

Tôi không chắc chắn rằng điều này có thể hoạt động với pom mẹ (tôi tự hỏi điều này có thể dẫn đến các vấn đề phụ thuộc theo chu kỳ) hay không. Nhưng cá nhân, tôi sẽ đặt tất cả những thứ này vào trong một dự án chuyên dụng, ví dụ: trong một dự án anh chị em của các ứng dụng web của bạn, chứ không phải trong pom cha mẹ. Tôi không nghĩ rằng nó thực sự là một vấn đề lớn và đây là IMHO một thiết lập tốt hơn, đặc biệt là nếu bạn định sử dụng hàng hóa cho integration testing.

+1

+1, nhưng hãy xem xét một bổ sung: nếu cấu hình trong phụ huynh được đặt trong phần pluginManagement, các ứng dụng web con chỉ cần khai báo plugin (như trong đoạn mã OPs) để cấu hình được kế thừa. Điều này tránh bất kỳ vấn đề chu kỳ nào. –

6

Có lẽ liên kết này giải quyết vấn đề của bạn:

http://www.jiajia.eu/post/2008/10/08/Deploy-multiple-web-apps-with-maven-jetty-plugin.aspx .

liên kết ở trên bị hỏng, vì vậy đây là một hình mới:

http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin

Xem phần "Chạy Nhiều webapps".

+0

+1 Giải pháp này sử dụng trình cắm thêm maven để triển khai ứng dụng web "chị" được liên kết dưới dạng đường dẫn tương đối (../webapp2/target/webapp2.war) thông qua jetty.xml, trong khi vẫn giữ lại chu kỳ phát triển nhanh với triển khai nóng khả năng cho webapp1. – Palimondo

+1

liên kết này không hoạt động. –

+0

Mục tiêu liên kết ban đầu không còn nữa. Tôi đã thêm một liên kết mới. – Janning

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