2010-03-23 35 views
7

Tôi thấy rất bực bội khi phát triển web với Maven & Jetty sử dụng Eclipse, so sánh với những gì tôi đã làm bằng cách sử dụng Visual Studio. Mỗi khi tôi thực hiện thay đổi, ngay cả một thay đổi nhỏ trong tệp xem của tôi, (* .jsp, ví dụ), thì tôi phải đóng gói lại toàn bộ web -> đợi cầu tàu tải lại mọi thứ trước khi tôi có thể thấy thay đổi.Phát triển web với Jetty & Maven

Có cách nào tốt hơn để làm điều đó, một số thứ như một plugin tự động sẽ chọn thay đổi tệp và triển khai tệp đã thay đổi cho máy chủ web không?

+0

Tôi chỉ tình cờ gặp bài đăng này, tôi phải đề cập đến một giải pháp commericial cho vấn đề này là http://www.zeroturnaround.com/jrebel/. – Andy

Trả lời

13

Cách bạn đang sử dụng Maven, Jetty (và Eclipse) với nhau là không rõ ràng nhưng vì câu hỏi được gắn thẻ Maven, tôi sẽ trình bày cách Maven. Với dự án kiểu war, một cách dễ dàng để thiết lập và chạy web là sử dụng Maven Jetty Plugin. Để làm như vậy, chỉ cần thêm đoạn mã sau để POM của bạn:

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

Với thiết lập này, chạy mvn jetty:run sẽ bắt đầu một container cầu cảng với ứng dụng của bạn được triển khai. Bất kỳ thay đổi nào trên một chế độ xem sẽ làm cho JSP được biên dịch lại khi được yêu cầu. Và để cấu hình các cầu cảng cắm cũng để xem các thay đổi mã Java, bạn sẽ có thêm tùy chọn scanIntervalSeconds:

scanIntervalSecondsTùy chọn. Việc tạm dừng trong vài giây giữa các lần quét của webapp để kiểm tra các thay đổi và tự động triển khai lại nếu có bất kỳ phát hiện nào được phát hiện. Theo mặc định, đây là 0, điều này sẽ vô hiệu hóa quá trình quét triển khai nóng. Một số lớn hơn 0 cho phép nó.

Vì vậy, các cấu hình có thể trông giống như:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.mortbay.jetty</groupId> 
     <artifactId>maven-jetty-plugin</artifactId> 
     <version>6.1.10</version> 
     <configuration> 
      <scanIntervalSeconds>1</scanIntervalSeconds> 
     </configuration> 
     </plugin> 
     ... 
    </plugins> 
    ... 
    </build> 
    ... 
</project> 

Và nếu bạn muốn để có thể kết nối một trình gỡ lỗi từ xa, có một cái nhìn tại these instructions.

Đây là cách tôi luôn sử dụng Jetty với Maven và Eclipse, và tôi đã luôn hài lòng với thiết lập này. Tôi chưa bao giờ sử dụng bộ điều hợp Jetty cho WTP, thiết lập trước đó chỉ là cạnh tranh nhất.

+0

Hmm, nghe có vẻ thú vị. Trên thực tế, tôi đã suy nghĩ về một plugin tách biệt, một cái gì đó mà có thể gọi lại một giai đoạn maven (như 'gói') để đáp ứng với những thay đổi tập tin. ScanIntervalSeconds là một tùy chọn tuyệt vời. Nhưng điều gì về một plugin khác cũng bắt đầu một phiên bản khác của cầu cảng như Google App Engine (ví dụ như maven-gae-plugin) mà doesnot cung cấp tùy chọn này? –

+0

@Phuong Rất tiếc, tôi không có bất kỳ trải nghiệm nào với plugin gae nên tôi không thể nói nhiều về nó. –

+0

Tôi tìm thấy plugin eclipse FileSync: http://andrei.gmxhome.de/filesync/index.html có thể được sử dụng để sao chép các tệp đã thay đổi vào thư mục được triển khai. Tôi đang thử nó ngay bây giờ, trông đầy hứa hẹn vì nó sẽ không phụ thuộc vào những gì các maven-plugin có thể cung cấp. –

0

Jetty chưa sử dụng với Eclipse, nhưng nếu bạn sử dụng Tomcat (và tôi giả định Jetty sẽ hoạt động tốt) với WTP và plugin m2eclipse, Eclipse sẽ xây dựng và xuất bản ứng dụng web của bạn mỗi khi tài nguyên được lưu.

  1. Tạo (hoặc sử dụng dự án Maven) có bao bì 'chiến tranh'.

  2. Trong chế độ xem "máy chủ" của Eclipse, nhấp chuột phải và thiết lập máy chủ.

  3. Nhấp chuột phải vào máy chủ được định cấu hình và chọn "Thêm/xóa dự án" và chọn dự án của bạn.

  4. Nhấp vào hình tam giác màu xanh lục trong chế độ xem máy chủ để khởi động máy chủ.

Bây giờ Eclipse sẽ tự động tạo và xuất bản ứng dụng web của bạn mỗi lần bạn thay đổi. Lưu ý, bạn phải có plugin m2eclipse VÀ plugin tích hợp WPC m2eclipse để làm việc này.

+0

@Will: Trong dự án maven, các cài đặt được lưu trữ trong pom.xml bên sẽ được sử dụng để khởi động máy chủ (cổng, ví dụ, bằng cách gọi mục tiêu mvn). Tôi tự hỏi liệu nó có thể theo cách của bạn? –

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