2013-10-16 16 views
5

Trong dự án java của tôi, tôi cần phải sử dụng neo4j-1.9.3 mà phụ thuộc vào Lucene-3.6.2ElasticSearch mà phụ thuộc vào Lucene -4.4.0. Tôi biết rằng nếu tôi muốn sử dụng hai phiên bản của lucene trực tiếp, tôi có thể sử dụng ClassLoader để tải các lớp khác nhau từ các lucenes.Làm thế nào để sử dụng hai phiên bản của jar trong dự án java của tôi

Nhưng vấn đề là tôi sẽ không sử dụng apis của lucene trực tiếp ngay bây giờ. Có cách nào mà lucene-3.6.2 có thể được nạp khi api của neo4j đang chạy hay không, và lucene-4.4.0 có thể được nạp trong khi chạy apis của elasticsearch. Hai phiên bản của cuộc xung đột lucene bây giờ, và tôi cần phải chạy neo4j và elasticsearch trong một dự án. Làm thế nào tôi có thể giải quyết vấn đề phụ thuộc?

Xin cảm ơn trước.

+1

Tôi có cùng một vấn đề khi cố gắng sử dụng lucene-core-4.3.1.jar cho LUCENE và lucene-core-3.6.2.jar cho cơ sở dữ liệu neo4j được nhúng nhưng neo4j ngắt với lucene-core-4.3.1.jar. Bạn giải quyết vấn đề của mình như thế nào? – qualebs

Trả lời

0

Bạn vẫn có thể sử dụng giải pháp ClassLoader, nhưng đó là một doanh nghiệp khó chịu ở nơi dễ mắc lỗi.

Bạn cũng có thể sử dụng các JVM khác nhau.

Nhưng giải pháp cá nhân tôi sẽ chọn là một trong hai (hoặc cả hai) trong các cách sau:

  • Xác minh rằng phá vỡ Neo4J với Lucene 4.x. Có lẽ bạn sẽ nhận được may mắn và sẽ không có bất kỳ vấn đề bằng cách sử dụng phiên bản mới nhất.
  • Chia chúng thành hai ứng dụng mà một trong số chúng, nói Neo4J, được truy cập bởi ứng dụng khác thông qua dịch vụ web (nhiều khả năng REST) ​​nhất. Tuy nhiên, Neo4J đã tích hợp sẵn REST API.
+0

vâng, tôi sẽ cố gắng giải quyết nó bằng cách cập nhật neo4j hoặc tách chúng. Nhưng có thể cho tôi biết thêm về giải pháp ClassLoader hoặc cách sử dụng các JVM khác nhau? Tôi chỉ muốn học những điều này. Cảm ơn – GameBoy

+0

Chúng là những giải pháp có thể về mặt lý thuyết, nhưng tôi thấy chúng có nhiều vấn đề hơn chúng đáng giá cho mục đích của tôi. Dưới đây là các tham chiếu: http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html và http://stackoverflow.com/questions/16714043/run-java-code-in-multiple- jvm-instances – Vidya

0

OSGi có thể khắc phục sự cố này. Gói OSGi không có gì khác ngoài một cái lọ có siêu dữ liệu bổ sung chi tiết các phiên bản. Gói có số phiên bản và sẽ chi tiết số phiên bản (hoặc dải ô) của các lọ phụ thuộc.

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