Tích hợp tomcat và eclipse làm môi trường triển khai nóng


88

Tôi muốn thiết lập eclipse và tomcat theo kiểu tích hợp để các thay đổi đối với JSP và các servlet của tôi (nếu có thể) được phản ánh ngay lập tức mà không yêu cầu triển khai.

Ok, đây là một trong những câu hỏi có rất nhiều câu trả lời trên internet nhưng chúng đều có vẻ khác nhau. (sử dụng plugin Sysdeo, sử dụng plugin JBOss, thực hiện các công việc với Eclipse lỗi thời, sử dụng MyEclipse thay thế, v.v.) và tôi không thể tìm thấy 1 tài nguyên chính thức nào để tham khảo. Vì vậy, vì lợi ích của tôi, thủ tục đơn giản nhất và được khuyến nghị nhất để thiết lập điều này là gì?

Điều này giả sử tôi có nhật thực và tomcat chạy độc lập. Tôi thực sự đã quản lý để tích hợp chúng theo cách triển khai không nóng bằng cách sử dụng hướng dẫn tại đây: http://www.ibm.com/developerworks/opensource/library/os-eclipse-tomcat/index.html

Phiên bản Eclipse Phiên bản: 3.4.2 (Ganymede) Tomcat v6.0.20


17
4 năm sau, tôi bối rối bởi sự thật rằng nó vẫn còn là một vấn đề. Nào, nó khá cơ bản.
Konrad Garus

7 năm sau (gần như vậy), tôi nghĩ mình đã phát hiện ra giải pháp: stackoverflow.com/a/37064672/1034436
martian111

Câu trả lời:


75

Có hai lựa chọn.

Đầu tiên, Eclipse cho phép bạn làm điều này, với một chút thay đổi về cấu hình (xem thêm bài đăng chi tiết này )

  • thêm Tomcat vào danh sách máy chủ
  • tạo dự án "Dự án web động" (Thông qua trình hướng dẫn tạo hoặc thông qua phần khía cạnh trong cài đặt)
  • thêm dự án vào tomcat và định cấu hình "Triển khai lắp ráp"
  • nhấp đúp chuột vào tomcat từ danh sách để mở cấu hình
  • Thay đổi "Xuất bản" thành "Không bao giờ tự động xuất bản" (điều này có nghĩa là máy chủ sẽ không được khởi động lại khi bạn nhấn ctrl + s)
  • khởi động tomcat ở chế độ gỡ lỗi

Điều này sẽ vẫn phản ánh các thay đổi mã nhưng sẽ không khởi động lại máy chủ.

Thứ hai, tôi đã sử dụng plugin FileSync trong một thời gian dài:

  • định cấu hình plugin để gửi tất cả các lớp từ giám đốc bin tới WEB-INF/classes cài đặt tomcat của bạn (điều này gần giống như định cấu hình lắp ráp triển khai)
  • định cấu hình tất cả các tài nguyên khác để đi đến các vị trí tương ứng của chúng
  • tùy ý, bên ngoài tất cả các đường dẫn tuyệt đối từ cài đặt vị trí đồng bộ hóa tệp vào một biến duy nhất và định cấu hình biến đó trong eclipse (do đó, bạn cũng có thể cam kết cài đặt đồng bộ hóa tệp, nếu tất cả các thành viên đang sử dụng eclipse)
  • thêm Tomcat vào danh sách Máy chủ trong eclipse, định cấu hình tùy chọn "Vị trí máy chủ" thành "Sử dụng cài đặt tomcat" (màn hình mở ra khi bạn nhấp đúp vào tomcat từ danh sách máy chủ)
  • khởi động tomcat ở chế độ gỡ lỗi

Nó hoạt động hoàn hảo cho tôi theo cách đó. Mọi thay đổi phi cấu trúc đều được phản ánh ngay lập tức mà không cần triển khai lại.

Cập nhật:
Bạn có thể đọc thêm về các phương pháp triển khai nóng tại đây .
Tôi cũng đã tạo một dự án dễ dàng đồng bộ hóa không gian làm việc với vùng chứa servlet.


@VladimirTsvetkov không - đây là hai lựa chọn riêng biệt
Bozho

Tôi đang thử cách tiếp cận đầu tiên của bạn nhưng tôi đang sử dụng Lớp phủ Maven và khi tôi thay đổi tệp ở một trong các lớp phủ, máy chủ vẫn được khởi động lại (lớp phủ không phải là dự án web động mà là mô-đun web động). Bất kỳ ý tưởng?
Hoffmann

2
Tôi có ấn tượng rằng bằng cách thay đổi "Xuất bản" thành "Không bao giờ tự động xuất bản", các JSP không được tải lại / biên dịch lại nữa khi thay đổi. Mặc dù vậy, phần tải lại lớp hoạt động tốt bằng cách khởi động Tomcat ở chế độ gỡ lỗi.
yglodt

5
Tôi làm theo cách khác: đầu tiên, thay đổi để tự động xuất bản; thứ hai, nhấp vào Modulestab trong cấu hình máy chủ, sau đó nhấp vào edit, bỏ chọn auto deploy enabled, tôi nghĩ đây là cách đơn giản nhất. Tái bút: cách đầu tiên của bạn không hiệu quả với tôi.
hiway

@hiway, tab Mô-đun này ở đâu bên trong tab cấu hình máy chủ?
Mateus Viccari

30

Chỉ cần để eclipse ghi trực tiếp các tệp lớp vào thư mục $ TOMCAT / webapps / MyWebApp / WEB_INF / class. Sau đó, cấu hình apache-tomcat để kiểm tra xem các tệp lớp đã được cập nhật hay chưa và tải lại nếu chúng có.

Để cấu hình tomcat tự động tải lại một lớp khi nó thay đổi, bạn cần

chỉnh sửa $TOMCAT/conf/context.xmlvà đặt:

<Context reloadable="true"> 

Bạn cũng có thể phải chỉnh sửa và tải lại webapps/$YourWebApp/web.xmltệp của mình và bao gồm:

<web-app reloadable="true">

Tôi không thể nhớ liệu cả hai thay đổi có cần thiết hay không nhưng đó là cách tôi đã định cấu hình tomcat-6.0.18 để tự động tải lại.


Theo tài liệu, tomcat.apache.org/tomcat-6.0-doc/config/context.html họ khuyên không nên đặt Contextcác phần tử trong tệp server.xml, nhưng nó nên theo dõi / WEB-INF / class / và / WEB-INF / lib cho bất kỳ thay đổi nào. Bạn đã đọc ở đâu về thuộc tính cho web-appphần tử?
Michael

Xin lỗi, đọc sai câu trả lời của bạn một chút. Context.xml "phải được tải cho mỗi ứng dụng web".
Michael

2
Làm cách nào để bạn định cấu hình nơi Eclipse ghi các tệp lớp vào?
yglodt

7

Tuyên bố từ chối trách nhiệm : Tôi chỉ là một khách hàng vui vẻ, tôi không làm việc cho Zero Turnaround và tôi không liên kết với họ dưới bất kỳ hình thức nào.

Hãy xem JRebel - nó cho phép bạn viết mã mà không cần khởi động lại ứng dụng web. Về cơ bản, nó hoạt động bằng cách chỉnh sửa các lớp học của bạn và điều chỉnh các thay đổi của chúng. Nó xử lý nhiều trường hợp hơn triển khai nóng , bao gồm:

  • Thêm / xóa phương thức
  • Thêm / xóa các hàm tạo
  • Thay đổi giao diện
  • Thêm / xóa các giao diện đã triển khai

thương mại , ( chi tiết về giá , $ 550 / năm kể từ tháng 6 năm 2018) và nó có rất nhiều plugin cho các khuôn khổ của bên thứ ba, bao gồm:

  • Guice
  • Mùa xuân
  • Thanh chống 2

Bạn nhận được bản dùng thử miễn phí khá dễ dàng - tôi khuyên bạn nên thử.


2
Jrebel, khi nó hoạt động, nó hoạt động. Khi không, đó là một cơn ác mộng. Tôi đã đập đầu với sự hỗ trợ của họ trong hơn một tuần và tôi vẫn không thể làm cho nó hoạt động trong thiết lập mvc mùa xuân đơn giản của tôi. Họ sẽ không giúp gì thêm nếu tôi không gửi cho họ ứng dụng của tôi hoặc thế hệ sau của ứng dụng của tôi. VÀ, giá của bạn đã lỗi thời - hiện họ tính phí một quả bom. Cảm ơn Chúa tôi chỉ sử dụng phiên bản thử nghiệm của họ
happybuddha

Giá hiện tại là $ 365 / năm / chỗ
Joseph Lust

Và bây giờ là $ 550 / năm / chỗ ngồi
frewper

3

Thay đổi không gian làm việc của bạn trong Eclipse thành \ tomcat \ webapps Vì nó chỉ dành cho công việc của bạn, điều này sẽ hoạt động tốt. Bất kỳ thay đổi nào bạn thực hiện trong Eclipse đều nằm trong cùng một thư mục tomcat tìm kiếm các ứng dụng để triển khai


3

Trong chế độ xem máy chủ, hãy tạo một máy chủ mới, chưa thêm bất kỳ tài nguyên (dự án) nào vào máy chủ. Nhấp đúp vào máy chủ trong vị trí máy chủ. Chọn "Sử dụng cài đặt tomcat". Sửa đổi "Đường dẫn triển khai" thành thư mục triển khai tomcat (Ví dụ: c: \ server \ Tomcat 7.0.14 \ webapps). Mở rộng "Phần xuất bản". Chọn "Tự động xuất bản sau sự kiện xây dựng". Lưu và đóng. Từ menu nhật thực, hãy kiểm tra "Dự án -> Xây dựng tự động". Từ chế độ xem máy chủ, nhấp chuột phải vào máy chủ của bạn, "Thêm và xóa", xuất bản dự án của bạn.


2

Tại sao không sử dụng một máy chủ tomcat tích hợp từ với trong eclipse nếu đây chỉ là để phát triển? Bạn có thể cấu hình máy chủ theo tùy chọn window->. Sau khi nó được định cấu hình nếu bạn có jsp gọi là page.jsp, bạn có thể nhấp chuột phải vào nó và chọn chạy trên máy chủ. Trong tùy chọn-> chung-> Trình duyệt web, bạn có thể chọn thời tiết để sử dụng trình duyệt cài sẵn hoặc trình duyệt bên ngoài. Thực hiện một số thay đổi đối với jsp, lưu và làm mới trang của bạn từ trình duyệt. Các thay đổi sẽ tự động được phản ánh sau khi bạn lưu và làm mới trình duyệt của mình.


2

Những gì phù hợp với tôi ở đây là:

context.xml như thế này:

<Context path="/myapp" docBase="myapp" debug="5"
    reloadable="false" antiResourceLocking="false" antiJARLocking="true">
<!-- this because i´m using Spring 3.1 with Tomcat -->
    <Loader     loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader" />

</Context>

Sau đó, trên tab Máy chủ trong Eclipse, trên tab "Mô-đun", tôi đã tắt "Tự động tải lại" cho tất cả các mô-đun đang được triển khai.

Cũng để cấu hình mặc định để cho phép tự động xuất bản.

Và đang sử dụng Maven với WTP, đừng quên để lại nội dung của src / main / resources, vì Eclipse khăng khăng loại trừ nội dung của thư mục này của bản dựng cuối cùng.

Chỉ với tất cả những điều này, tôi đã có đầy đủ các lớp (VM) triển khai nóng với tài nguyên triển khai nóng !!!


1

Trong môi trường phát triển của bạn, chỉ cần trỏ máy chủ Tomcat của bạn để tìm JSP trong bất kỳ thư mục nào bạn đang phát triển chúng. Ngay sau khi bạn lưu tệp, bạn sẽ có thể thấy các thay đổi sau đó.


1

Tôi đã quản lý để làm cho điều này hoạt động trên môi trường phát triển của tôi bằng cách sử dụng tác nhân JVM được tải mùa xuân . Trong khi tôi phát triển các ứng dụng web Spring, mô tả của dự án đó có đề cập rằng nó là

có thể sử dụng trên bất kỳ mã bytecode nào có thể chạy trên JVM

Sử dụng thiết lập sau, tôi có thể nhận được các thay đổi để xuất bản tự động lên phiên bản Tomcat đính kèm (phương pháp Eclipse WTP thông thường). Tôi đang sử dụng Spring Tool Suite 3.7.3 dựa trên Eclipse Mars.2 (4.5.2).

  1. Tải xuống bản phát hành mới nhất JAR của Spring Loaded từ dự án Github của họ . Điều này đã được thử nghiệm với springloaded-1.2.5.RELEASE.jar.
  2. Thiết lập Máy chủ Tomcat trong Eclipse như bình thường (được thử nghiệm với Tomcat 8.0.30)
  3. Mở trang cấu hình của Máy chủ Tomcat trong Eclipse (nhấp đúp vào phiên bản máy chủ trong tab "Máy chủ").
  4. Trong phần "Tùy chọn máy chủ", bỏ chọn "Mô-đun tự động tải lại theo mặc định".
    • Lưu ý: Nếu bạn đã thêm mô-đun web vào máy chủ, bạn có thể cần phải tắt "Tự động tải lại" trên từng mô-đun đó qua tab "Mô-đun" (ở cuối cửa sổ trang cấu hình).
  5. Trong phần "Thông tin chung", nhấp vào "Mở cấu hình khởi chạy"
    • Trong tab "Đối số", thêm phần sau vào cuối "Đối số VM": -javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
    • Để cho phép các JAR được theo dõi ngoài .classcác tệp của dự án , hãy định cấu hình -Dspringloaded=watchJars=đối số VM theo nhận xét của vấn đề này .

Khởi động máy chủ và xuất bản các dự án Ứng dụng Web Động lên nó như bình thường. Một lần nữa, tôi đã có thể kiểm tra điều này với các ứng dụng web Spring. Ví dụ: sửa đổi mã, phương thức cộng / trừ, v.v. trong các lớp @Controller được áp dụng gần như ngay lập tức sau khi tôi lưu tệp và Eclipse xây dựng và xuất bản lớp đã thay đổi. Cuối cùng, phần Câu hỏi thường gặp của dự án Spring Loaded đã đề cập đến một số trường hợp mà mọi thứ sẽ không tải lại, vì vậy những trường hợp đó sẽ yêu cầu khởi động lại máy chủ / ứng dụng. Nhưng những trường hợp ngoại lệ đó ít thường xuyên hơn nhiều.

Một lưu ý nữa: Điều này KHÔNG hoạt động với Máy chủ Pivotal tc được nhúng hoặc Máy chủ VMware vFnai tc đi kèm với STS. Đối với các máy chủ đó, có tùy chọn "Bật tải lại dựa trên tác nhân Java (thử nghiệm)", nhưng tùy chọn này sử dụng bản phát hành Spring Loaded 1.2.0 cũ hơn, không hoạt động với tôi.


Có vẻ như bạn phải tham gia Spring, Làm thế nào về Non Springứng dụng.
Tangoo

Mặc dù bạn cần cấu hình SpringLoaded JAR cho Tomcat, nhưng bản thân các ứng dụng đang chạy KHÔNG cần phải là ứng dụng Spring (cũng như không bao gồm bất kỳ Spring JAR nào). Tôi đã thử nghiệm điều này thành công với một Servlet HelloWorld đơn giản.
martian111

0

Bạn có sẵn sàng sử dụng Jetty cho mục đích phát triển không?

Nếu vậy, nó khá đơn giản để sử dụng với Maven - chỉ cần chạy mvn jetty:run


0

Đây có thể không phải là cách tốt nhất, nhưng nó phù hợp với tôi.

  • $ tomcat / conf / Catalina / localhost / .xml
  • $ contextPath / webapp / web / WEB-INF / lib / *. jar
  • $ contextPath / webapp / web /
  • $ eclispeWorkbench / project-servlet / src /
  • $ eclispeWorkbench / project-servlet / servlet.jardesc (nên xuất jar sang lib dir trong $ contextPath)
  • $ eclipseWorkbench / project-jsp /

Tôi sử dụng lệnh rsync để đồng bộ hóa các thay đổi từ dự án jsp của mình sang $ contextPath.

Sử dụng gỡ lỗi từ xa trong Eclipse cho Tomcat để cho phép trao đổi nóng mã hạn chế. Nếu bạn thay đổi trường tĩnh hoặc thêm phương thức, bạn sẽ cần xuất jar và khởi động lại ngữ cảnh.


0

chúng ta có thể sử dụng tùy chọn dưới đây? Nhấp đúp vào Máy chủ trong eclipse -> Vị trí máy chủ -> Sử dụng cài đặt tomcat. Nó kiểm soát việc cài đặt tomcat. Bạn không cần phải khởi động lại máy chủ để có những thay đổi trong các lớp java.


0

Tôi đã tìm thấy một cách đơn giản nhất: sử dụng các liên kết tượng trưng: Tôi nghĩ đây là cách nhanh nhất vì không có sự đồng bộ hóa nào cả: thư mục tomcat và thư mục dự án của bạn sẽ luôn là cùng một thư mục.

Tomcat sẽ định kỳ phát hiện các thay đổi và triển khai lại ứng dụng của bạn.

Ngoài ra còn có một cách để gỡ lỗi ứng dụng của bạn, vì vậy tôi khiêm tốn nghĩ rằng đó là một giải pháp tốt.

Tôi đã ghi lại giải pháp của mình ở đây , cho bất kỳ ai quan tâm.


tôi có thể biết lý do tại sao có một nhu cầu sử dụng ứng dụng java từ xa vì nó được sử dụng localhost có nghĩa là tôi đang gỡ lỗi sử dụng máy tính cục bộ của riêng tôi
Karen Goh

0

Trong trường hợp, bạn đang vội vàng:

  1. kiểm tra "không bao giờ xuất bản tự động" trong tomcat (vùng chứa khác) trong nhật thực.
  2. khởi động tomcat (vùng chứa khác) ở chế độ gỡ lỗi.

thì đấy! :)


0

Trong Eclipse, nhấp vào Dự án ở menu trên cùng và đảm bảo rằng “Xây dựng Tự động” được chọn. Điều này đã khắc phục sự cố của tôi. Tôi đang chạy Eclipse với Tomcat bằng siêu dữ liệu không gian làm việc của mình. Tôi cũng đang chạy Maven trong một dự án Mô-đun Web động. Để xác minh, hãy thêm ứng dụng của bạn vào Tomcat. Khởi động Tomcat từ bên trong Eclipse. Đảm bảo rằng ứng dụng của bạn đã được triển khai và đang chạy. Mở tab Bảng điều khiển trong Eclipse. Thực hiện thay đổi trong ứng dụng của bạn. Sau một vài giây, bạn sẽ thấy thay đổi của mình được tự động xây dựng và triển khai cho Tomcat.


-2

Đơn giản nhất, nhanh nhất: thiết lập Eclipse để tạo tệp WAR khi bạn xây dựng; như một bước sau xây dựng, hãy sao chép tệp WAR đó vào thư mục ứng dụng web tomcat của bạn. Tomcat sẽ nhận ra sự thay đổi và làm mới trang web mà không cần triển khai. Lưu ý rằng điều này không hoàn hảo; người dùng sử dụng ứng dụng web đó có thể có trải nghiệm kém tối ưu, vì Tomcat khởi động lại ứng dụng web "dưới" họ; nhưng điều này phù hợp với yêu cầu của bạn.


1
ok ... Tôi đoán tôi đã không nói rõ ý định của mình. Tôi thực sự không quan tâm đến việc triển khai ứng dụng cho một số người dùng, nhưng tôi đang cố chạy tomcat với eclipse cho nhu cầu phát triển hàng ngày của mình và để rút ngắn chu kỳ phản hồi của (thực hiện thay đổi) -> (Xem Kết quả) thay vì (Thực hiện Thay đổi) -> Triển khai -> (Xem Kết quả)
udit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.