2010-01-07 27 views
8

Tôi có một ứng dụng web cũ chạy trong Tomcat 5.0.Kiểm soát thứ tự classpath của các lọ trong WEB-INF/lib trên Tomcat 5?

ứng dụng

web này có hai lọ trong WEB-INF/lib, chúng ta hãy nói Foo-2.0.jarBar-2.0.jar. Bar-2.0.jar thực sự bao gồm Foo-1.0.jar bên trong nó. Bar cũng là một dự án đã chết, có nghĩa là không nâng cấp, không có nguồn, nhưng vẫn quan trọng đối với ứng dụng.

Bản phát hành mới nhất của ứng dụng này yêu cầu Foo-2.0.jar cho một số nội dung khác. Có cả hai Foo-1.0.jarFoo-2.0.jar trong đường dẫn lớp tạo xung đột, cụ thể là loại lỗi ClassDefNotFound, trong đó lớp học sau này được thêm vào 2.0 không thể tìm thấy trong 1.0, v.v.

Trong Eclipse, giải pháp đơn giản là click chuột phải vào của bạn dự án, nhấp Thuộc tính>Java xây dựng con đường>Trình tự, xuất khẩu và để di chuyển Foo-2.0.jar trên Bar- 2.0.jar để nó được giải quyết trước.

Làm cách nào để hoàn thành loại đường dẫn lớp này cho các lọ trong WEB-INF/lib trong Tomcat?

Trả lời

3

Đặt Foo-1.0.jar thành $ CATALINE_HOME/phổ biến/được xác nhận (hoặc bất kỳ nơi nào khác nơi tệp sẽ được tải sau Foo-2.0.jar).

1

Bạn không sử dụng tính năng này trong Tomcat. Nếu cả hai Foo-1.0.jar và Foo-2.0.jar là cần thiết trong classpath cùng một lúc, bạn sẽ cần một số tổ chức lại classpath chính.

Nếu Bar-2.0 có thể hoạt động với Foo-2.0, thì điều tốt nhất bạn nên làm là tự mình xây dựng lại Bar-2.0 mà không cần Foo-1.0.jar bên trong nó.

+0

Không có cách nào để biết liệu Bar-2.0 có hoạt động với Foo-2.0 hay không và đó là thư viện lớn, chỉ nhị phân không có trường hợp kiểm tra. – rcampbell

+0

Tôi tin rằng giải pháp bạn đang sử dụng có Bar-2.0 chạy với Foo-2.0, chỉ trong một loại đường vòng. – jsight

4

Dải Foo-1.0.jar trong số Bar-2.0.jar. Vì nó là, nó chỉ là vấn đề chờ đợi để xảy ra cả cho phát triển (cần phải fudge dev. Môi trường) và cho triển khai.

+0

Tôi thực sự nghĩ đây là gợi ý tốt nhất. Đóng gói lại thanh-2.0.jar của bạn, nếu không bạn chỉ yêu cầu những cơn đau đầu xuống đường. –

-2

Đây là một chút hacky nhưng có thể hoạt động. Thay đổi tên của Foo-2.0.jar thành bảng chữ cái trước Bar-2.0.jar, nói AFoo-2.0.jar.

32

Tomcat 5's classloading precedence cho webapps là khoảng như sau: đầu tiên bootstrap/hệ thống (JRE/lib, sau đó các lớp học nội bộ của Tomcat), sau đó các thư viện webapp (đầu tiên WEB-INF/classes, sau đó WEB-INF/lib), sau đó các thư viện chung (đầu tiên Tomcat/common, sau đó Tomcat/lib) và cuối cùng là các thư viện được chia sẻ trên webapp (Tomcat/shared).

Vì vậy, để có được Foo-2.0.jar nạp trướcBar-2.0.jar, tốt nhất những gì bạn có thể làm là để di chuyển Bar-2.0.jarWEB-INF/lib-Tomcat/common hoặc Tomcat/shared.

JAR không được tải theo thứ tự chữ cái của tên của chúng. Ít nhất, không có thông số nào nói điều đó. Đổi tên chúng để thay đổi thứ tự tên tệp chữ cái không có ý nghĩa gì.

+0

Georgy đã trả lời đầu tiên, vì vậy tôi đã chấp nhận nội dung gửi của anh ấy, nhưng những gì bạn mô tả chính xác là những gì tôi đã làm để giải quyết vấn đề. Liên kết của bạn đặc biệt hữu ích. ** Tôi khuyến khích mọi người bỏ phiếu cho câu trả lời này **. – rcampbell

+1

Bạn được chào đón. Mặc dù tôi sẽ chỉ ra rằng câu trả lời ở đây là ** không ** theo mặc định được sắp xếp theo ngày trả lời. Tại thời điểm viết, bạn có thể nhìn thấy ở phía trên của avatar người dùng mà tôi đã trả lời câu hỏi này cách đây 23 phút và Georgy 15 phút trước. Bạn có thể thay đổi thứ tự bằng một trong ba tab 'cũ',' mới nhất' và 'phiếu bầu 'của các câu trả lời. Mặc định là 'phiếu bầu '. – BalusC

+1

Và, trong chú giải công cụ, bạn có thể thấy thời gian chính xác. Vì vậy, tôi đã thực sự đầu tiên: o – BalusC

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