2015-01-11 11 views
5

Tôi có một vấn đề trật tự classpath quan trọng do đó tôi cần phải đảm bảo một JAR 1 đến trước JAR 2 trong classpath này.Có cách nào để xác định thứ tự mà phụ thuộc gradle (như trong IDE Eclipse) được sắp xếp trong classpath (biên dịch và thời gian chạy) không?

Có cách nào để thực thi điều này trong GRADLE_DEPENDENCIES trong IDE Eclipse hay không.

Mọi thông tin chi tiết về cách thức tương tự có thể đạt được trong quá trình đóng gói ứng dụng (phân phối)?

+0

Có, bạn có thể làm điều đó bằng các phụ thuộc, nhưng hãy chú ý đến hai quy tắc ưu tiên cao hơn: http://stackoverflow.com/a/38743046/715269 – Gangnus

Trả lời

6

Lý tưởng nhất là bạn nên sửa các phụ thuộc trong các dự án của mình để bạn có chính xác tập hợp các lọ trong đường dẫn lớp. Hãy xem cách loại trừ các phụ thuộc trong Dependency Management chương trong tài liệu Gradle.

Nếu bạn vẫn muốn sửa đổi mục nhập classpath cho nhật thực, đây là một giải pháp khả thi.

Bạn có thể tinker với .classpath tập tin được tạo ra bởi các nhiệm vụ eclipse trong Gradle sử dụng như sau:

eclipse.classpath.file { 
    withXml { 
     // This returns a the classpath XML root node (groovy.util.Node) 
     def node = it.asNode() 

     // Do the re-rodering of classpath entries by modifying the node object 
    } 
} 

Hãy xem groovy.util.Node cho các phương pháp bạn có thể sử dụng để xem/sửa đổi các nút XML. Lưu ý rằng bạn rất có thể sẽ không có bất kỳ quyền kiểm soát đối với đường dẫn lớp được thực hiện khi bạn chạy phân phối ứng dụng đóng gói trong một JVM, điều này sẽ kéo bạn trở lại hình vuông khi chạy ứng dụng. Do đó, giải pháp tốt nhất là tìm ra nguồn gốc của phụ thuộc jar mà bạn không muốn trong classpath của bạn và loại bỏ nó từ đó, chứ không phải dựa vào thứ tự classpath là nguy hiểm và không đáng tin cậy.

+0

Cảm ơn câu trả lời được làm tròn tốt. Tôi đã nhận ra rằng vấn đề là do xung đột phiên bản của một cái lọ đang được thêm vào như một sự phụ thuộc chuyển tiếp. Tôi đã giải quyết vấn đề bằng cách loại bỏ nó trong khai báo phụ thuộc bằng cách sử dụng chức năng "loại trừ". Cảm ơn một lần nữa cho câu trả lời thông tin. – acthota

+0

Không thể upvote :(Tôi không đủ uy tín để upvote. – acthota

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