2015-10-01 15 views
5

Trong file build.gradle của tôi, tôi cần phải thêm dòng:Shadow Plugin Gradle: mergeServiceFiles() làm gì?

shadowJar { 
    mergeServiceFiles() 
} 

Nếu không jar không chạy đúng cách. Tôi tự hỏi những gì dòng này không chính xác? Tôi sử dụng plugin Gradle trong Eclipse Luna. Tôi tạo ra jar trên một dự án Java phụ thuộc vào một dự án khác.

Trả lời

1

Tại sao bạn không tự mình điều tra mã đó? mergeServiceFiles được khai báo chính xác here và thực hiện của nó là như sau:

/** 
* Syntactic sugar for merging service files in JARs 
* @return 
*/ 
public ShadowJar mergeServiceFiles() { 
    try { 
     transform(ServiceFileTransformer.class); 
    } catch (IllegalAccessException e) { 
    } catch (InstantiationException e) { 
    } 
    return this; 
} 

Như bạn có thể thấy nó sử dụng ServiceFileTransfomer được định nghĩa here. Từ tài liệu của nó:

Modified từ org.apache.maven.plugins.shade.resource.ServiceResourceTransformer.java

Tài biến mà gắn thêm mục trong META-INF/nguồn lực dịch vụ thành một nguồn duy nhất. Ví dụ: nếu có một số tài nguyên META-INF/services/org.apache.maven.project.ProjectBuilder trải rộng trên nhiều JAR, các mục nhập riêng lẻ sẽ là được ghép thành một đơn META-INF/services/org.apache. maven.project.ProjectBuilder tài nguyên đóng gói vào JAR kết quả được tạo ra bởi quá trình tô bóng.

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