2013-04-22 22 views
5

Chúng tôi có phiên bản play.xramework 1.2.x cũ, nơi chúng tôi sao chép tất cả các lọ vào dự án/lib để playframework có thể tiêu thụ chúng. Chúng tôi cũng muốn sao chép tất cả các lọ nguồn để khi runnig chơi eclipsify, chúng ta có thể xem tất cả các nguồn của bên thứ ba. Có cách nào để làm điều này với gradle?cách sao chép tất cả các lọ nguồn bằng cách sử dụng gradle

và tôi có nghĩa là tất cả các lọ nguồn đã được tải xuống khi tôi chạy nhật thực gradle khi tôi thấy chúng tải xuống các vị trí bộ nhớ cache. Chúng tôi đã gradle eclipse gọi chơi eclipsify cho chúng tôi trên một dự án cũng như vậy chúng tôi có thể 100% chỉ cần sử dụng gradle.

cảm ơn, Dean

Trả lời

5

điều này không thẳng về phía trước như mong đợi. Bản sao sau đoạn các lọ nguồn cho tất cả phụ thuộc (runtime + biên dịch) của một dự án java vào một thư mục cụ thể:

task copySourceJars(type:Copy){ 
     def deps = configurations.runtime.incoming.dependencies.collect{ dependency -> 
      dependency.artifact { artifact -> 
        artifact.name = dependency.name 
        artifact.type = 'source' 
        artifact.extension = 'jar' 
        artifact.classifier = 'sources' 
       } 
      dependency 
     } 
     from(configurations.detachedConfiguration(deps as Dependency[]).resolvedConfiguration.lenientConfiguration.getFiles(Specs.SATISFIES_ALL)) 
     into('sourceLibs') 
    } 

Lý do chúng tôi sử dụng một lenientConfiguration ở đây là, chúng ta không muốn thất bại nếu một nguồn artifact không thể được giải quyết. Có thể có một cách thanh lịch hơn, nhưng tôi không nhìn sâu hơn vào điều đó.

hy vọng nó sẽ giúp,

René

+0

Có vẻ như có lỗi trong tập lệnh, 'resolveConfiguration' được viết hai lần trong câu lệnh' from (..) '. Hơn nữa, mã nguồn tải xuống chỉ dành cho các phụ thuộc trực tiếp, chứ không phải cho phần phụ thuộc, xem câu trả lời của tôi. – eskatos

+0

@eskatos Tôi đã xóa 'resolveConfiguration' trùng lặp. – sschuberth

4

Rene Câu trả lời sẽ tải nguồn lọ phụ thuộc trực tiếp, không phải là nguồn bình của tất cả các transitives phụ thuộc.

Dưới đây là một nhiệm vụ mà sẽ làm các trick:

task copySourceJars(type: Copy) { 
    def sources = configurations.runtime.resolvedConfiguration.resolvedArtifacts.collect { artifact -> 
    project.dependencies.create([ 
     group: artifact.moduleVersion.id.group, 
     name: artifact.moduleVersion.id.name, 
     version: artifact.moduleVersion.id.version, 
     classifier: 'sources' 
    ]) 
    } 
    from configurations.detachedConfiguration(sources as Dependency[]) 
    .resolvedConfiguration.lenientConfiguration.getFiles(Specs.SATISFIES_ALL) 
    into file('some-directory/') 
} 

Một sau đó có thể thực hiện rất tương tự cho javadocs lọ bằng cách thay đổi classifier-javadoc.

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