Các tệp đã thay đổi của IntelliJ và Tomcat không được Tomcat tự động nhận ra


135

Tôi đang điều hành Intellij Ultimate với Tomcat và triển khai một cuộc chiến. Tất cả mọi thứ triển khai tốt vào thư mục webapp của tomcat.

Khi tôi thay đổi một tệp như tệp xhtml, có cách nào để tomcat tự động nhận thay đổi đó không? Ngay bây giờ tôi cần sao chép tệp từ Intellij và sao chép nó vào thư mục nơi nó sống trong thư mục ứng dụng web tomcat. Tôi biết có một số tệp nhất định sẽ cần biên dịch lại, nhưng xhtml không phải là một trong số đó.

Câu trả lời:


20

Hãy để tôi mô tả chuỗi hành động bằng ảnh chụp màn hình:

  1. Mở cấu hình Tomcat Run / Debug của bạn (Chạy> Chỉnh sửa cấu hình)

nhập mô tả hình ảnh ở đây

  1. Nhấp vào biểu tượng thêm, chọn 'tạo tác' và sau đó chọn pizza_mvc:war exploded: nhập mô tả hình ảnh ở đây

  2. Sửa đổi 'Trên hành động cập nhật' và 'Diactivation khung': nhập mô tả hình ảnh ở đây

  3. Bất cứ khi nào bạn muốn làm mới tài nguyên của mình, hãy nhấn <Ctrl> + F10


Cảm ơn đã nhắc nhở tôi kiểm tra "Bật 'Cập nhật" hành động "
km1

290

Điều này không thể được thực hiện nếu bạn triển khai một cuộc chiến với IntelliJ IDEA. Tuy nhiên, nó có thể là nếu bạn triển khai một cuộc chiến bùng nổ . Trong IDEA:

  1. mở cấu hình Tomcat Run / Debug của bạn ( Chạy> Chỉnh sửa cấu hình )
  2. Chuyển đến tab "Triển khai"
  3. Trong phần "Triển khai khi khởi động máy chủ", hãy xóa (nếu có) phần tử my-webapp-name:war
  4. Nhấp vào biểu tượng thêm, chọn 'tạo tác' và sau đó chọn my-webapp-name:war exploded
  5. Nhấp OK (trên hộp thoại "Chọn Tạo tác để triển khai")
  6. Vẫn trong Cửa sổ Cấu hình Chạy / Gỡ lỗi, chọn tab "Máy chủ"
  7. Ở giữa tab đó, thay đổi cài đặt "Hủy kích hoạt khung" thành "Cập nhật tài nguyên" hoặc "Cập nhật lớp và tài nguyên"
    • Cập nhật tài nguyên: Tất cả các tài nguyên đã thay đổi (nghĩa là tất cả các thành phần ứng dụng khác ngoài các lớp) sẽ được cập nhật.
    • Cập nhật các lớp và tài nguyên: Tất cả các tài nguyên thay đổi sẽ được cập nhật; các lớp đã thay đổi sẽ được biên dịch lại. Lưu ý rằng liệu các lớp thực tế sẽ được cập nhật hay không phụ thuộc vào máy chủ web khả năng. Nếu tôi nhớ lại, Tomcat sẽ tải lại các tệp html / xhtml và jsp, nhưng không phải là Servlets hoặc các lớp mà JSP hoặc Servlets sử dụng. Bạn cần sửa đổi Tomcat để sử dụng trình nạp lớp động cho điều đó.
  8. Bạn cũng có thể đặt hành động " Bật 'cập nhật " cho hành động đã chọn ở trên.
    • Điều này xác định điều gì xảy ra khi bạn nhấn Biểu tượng cập nhậtbiểu tượng Cập nhật (hoặc Ctrl+ F10) trong cửa sổ Run.
    • "Hộp thoại hiển thị" xác định nếu IDEA nhắc bạn mỗi khi bạn nhấn biểu tượng cập nhật
  9. Nhấn OK.

Bây giờ bất cứ khi nào bạn thực hiện thay đổi, IDEA sẽ triển khai lại (các) tệp đã thay đổi khi khung của IDEA bị vô hiệu hóa (tức là mất tiêu điểm). Phải mất một hoặc hai giây, bạn sẽ thấy nó trong thanh trạng thái thấp hơn trong IDEA. Chắc chắn. bạn sẽ vẫn cần làm mới trình duyệt web của mình để nó tìm nạp tệp mới (tất nhiên trừ khi trang có tự động làm mới ajax như tìm nạp).

Một sự kết hợp tốt với Tomcat là đặt "Tắt kích hoạt khung" thành "Cập nhật tài nguyên" và hành động "Bật 'cập nhật" thành "Tái triển khai" hoặc "Khởi động lại máy chủ". Điều đó cho phép các trang tĩnh được cập nhật nhanh chóng thông qua hủy kích hoạt khung và lớp được cập nhật thông qua hành động 'cập nhật'.

Một công ty có tên ZeroTurnaround bán JRebel là một giải pháp nạp lớp năng động. Họ cũng có một loạt năm phần về chủ đề đó là rất tốt.


Tôi có lỗi: Error: Artifact 'my-webapp-name:war exploded' has invalid extensionlàm thế nào để sửa chữa?
Anton Dozortsev

3
Tôi cũng khuyên bạn nên sử dụng DCEVM để tải lại các lớp tự động. Sau đó, bạn có thể sử dụng "Cập nhật các lớp và tài nguyên" để áp dụng bất kỳ thay đổi nào cho mã nguồn mà không cần triển khai lại ứng dụng. Xem: blog.jetbrains.com/idea/2013/07/ . Ngoài những gì hướng dẫn này giải thích, cần phải đặt JAVA_HOME trong tab Cài đặt / Kết nối - Gỡ lỗi của Cấu hình chạy Tomcat để trỏ đến JRE của DCEVM.
Alex Fedulov

1
@yaroslavprokipchyn - Tôi không quen thuộc với JBoss và bất kỳ yêu cầu 'đặc biệt' nào mà nó có thể có. Nhưng theo tôi biết, nó nên hoạt động như nhau. Đối với tomcat, IDEA tạo cấu hình Tomcat (bối cảnh) cho Tomcat sử dụng thư mục đích / {bối cảnh} làm thư mục gốc của ứng dụng web. Bạn có thể muốn kiểm tra hướng dẫn trợ giúp cho bất kỳ thông tin cụ thể nào của JBOss.
Javaru

3
Trong bước 7, bạn sẽ không (ít nhất là trong Intellij 14) có được các lựa chọn thả xuống phù hợp trừ khi bạn có tất cả các tạo phẩm của mình được tải dưới dạng "phát nổ".
mortensi

1
@ChiefTwoP Pencil - Bước 5 đang nhấp OK trên hộp thoại "Chọn Artifacts để triển khai" (không có "áp dụng"), không phải cửa sổ cấu hình Run / Debug. Tôi đã thêm một tuyên bố làm rõ vào bước 5.
Javaru

12

Nếu bạn muốn cập nhật các lớp và tài nguyên, hãy chạy Tomcatchế độ Gỡ lỗi . Trong chế độ này, IntelliJ cập nhật các lớp và tài nguyên mà không gặp sự cố (trao đổi nóng).

Có cùng một vấn đề. IntelliJ không cập nhật dự án của tôi, vì tôi chạy dưới dạng "Chế độ chạy". Khi tôi chạy trong chế độ gỡ lỗi và nhấn Ctrl+ F10, nó sẽ cập nhật các lớp và tài nguyên.


Control-F10 đã khắc phục sự cố cho tôi. Cảm ơn bạn!
Jeffrey Getzin

3

Tôi đã tìm thấy một cách tốt hơn.

Trong Eclipse, chúng tôi đã tự động xây dựng, biên dịch + tải lại các tệp tĩnh. Trên thực tế các tệp tĩnh được phục vụ trực tiếp từ src / main / webapp .

Trong IntelliJ thay vì phục vụ trực tiếp từ src / main / webapp , có một thư mục được tạo trong mục tiêu, trong đó bạn sẽ có một bản sao của src / main / webapp và cả ngữ cảnh khác liên quan .. web-inf / class / lib.

Nếu bạn đặt thay vì mục tiêu đầu ra của tạo phẩm đã phát nổ thành src / main / webapp , nó sẽ không ghi đè lên các tệp nguồn của bạn và nó sẽ phục vụ trực tiếp, bạn sẽ không phải nhấn - cập nhật tài nguyên / cập nhật tài nguyên và các lớp

Vì vậy, những gì bạn cần làm trong IntelliJ là

  1. sửa đổi thư mục đầu ra artifact đã nổ thành src / main / webapp nhập mô tả hình ảnh ở đây
  2. tạo một macro để lưu và biên dịch lại / biên dịch các lớp bẩn (cmd + shift + f9) nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây
  3. chỉnh sửa sổ đăng ký và tùy chọn để xây dựng tự động và xây dựng trong khi ứng dụng đang chạy (cmd + shift + a - registry). nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Sau này, nếu bạn có các công việc thay đổi các tệp tĩnh từ bên ngoài IntelliJ, bạn sẽ thấy các thay đổi ngay lập tức mà không cần truy cập IntelliJ và Cập nhật tài nguyên và đối với các lớp bạn có macro đó lưu và biên dịch (Lưu ý: Bạn cũng có thể nhấn Compile / Biên dịch lại: cmd + shift + F9 / cmd + F9 - nếu bạn có nhiều trình soạn thảo đã mở sẽ thấy rằng các trình soạn thảo * bẩn của bạn sẽ không bị bẩn và các thay đổi (lớp) sẽ được tải lại)


Có vẻ như nếu bạn có trình biên dịch registry.automake .. đã kích hoạt nó sẽ đẩy các thay đổi của bạn bằng cách chỉ nhấn lưu.
Radu Toader

0

Điều đó chỉ có thể khi bạn triển khai thư mục chiến tranh đã nổ, kích hoạt tải lại nóng và bắt đầu tomcat ở chế độ gỡ lỗi.

Đây là các bước để đạt được điều này.

  1. mở cấu hình Tomcat Run / Debug của bạn (Chạy> Chỉnh sửa cấu hình)
  2. Chuyển đến tab "Triển khai" 3. Trong phần "Triển khai khi khởi động máy chủ", hãy xóa (nếu có) tên giả mạo tên web-webapp: war
  3. Nhấp vào biểu tượng thêm, chọn 'tạo tác' và sau đó chọn tên-webapp của tôi: chiến tranh bùng nổ
  4. Nhấp OK (trên hộp thoại "Chọn Tạo tác để triển khai")
  5. Vẫn trong Cửa sổ Cấu hình Chạy / Gỡ lỗi, chọn tab "Máy chủ"
  6. Thay đổi cài đặt "Tắt khung hình" và "Đang cập nhật hành động" thành "Cập nhật các lớp và tài nguyên"
  7. Áp dụng và lưu
  8. Chuyển đến cài đặt dự án bình thường bằng cách nhấp vào Tệp, sau đó Cài đặt HOẶC Nhấn CTRL + ALT + S
  9. goto "Xây dựng, thực thi, triển khai"
  10. Trình biên dịch
  11. Chọn Xây dựng dự án tự động
  12. tiết kiệm
  13. Bắt đầu tomcat ở chế độ gỡ lỗi

0

nếu bạn có nhiều tệp mà bạn muốn xem / phát ngay lập tức, hãy tải trực tiếp vào mục tiêu. * (chỉ thay đổi vị trí ghi vào thư mục đích / static /)

String yourpath = C\\andSoForth
    yourPath + "\\target\\classes\\static\\uploads\\audiofiles\\"

bạn sẽ có thể xem tệp của mình ngay lập tức mà không phải khởi động lại IDE của mình

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.