2012-03-06 28 views
24

Tôi đang sử dụng Gradle để giúp tự động hóa các tác vụ Hadoop. Khi gọi Hadoop, tôi cần có khả năng chuyển nó tới đường dẫn đến một số lọ mà mã của tôi phụ thuộc vào để Hadoop có thể gửi sự phụ thuộc đó vào trong giai đoạn map/reduce.Cách sạch nhất trong Gradle để lấy đường dẫn đến tệp jar trong bộ nhớ phụ thuộc gradle

Tôi đã tìm ra điều gì đó hiệu quả, nhưng nó cảm thấy lộn xộn và tôi tự hỏi liệu có một tính năng mà tôi đang thiếu ở đâu đó không.

Đây là một phiên bản đơn giản của kịch bản gradle của tôi mà có một sự phụ thuộc vào các Solr 3.5.0 jar, và một nhiệm vụ findSolrJar đó lặp qua tất cả các tập tin jar trong cấu hình để tìm một trong những quyền:

apply plugin: 'groovy' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile 'org.apache.solr:solr-solrj:3.5.0' 
} 

task findSolrJar() { 
    println project.configurations.compile*.toURI().find { URI uri -> new File(uri).name == 'solr-solrj-3.5.0.jar'} 
} 

chạy này mang lại cho tôi ra như thế này:

gradle findSolrJar                                                               
file:/Users/tnaleid/.gradle/caches/artifacts-8/filestore/org.apache.solr/solr-solrj/3.5.0/jar/74cd28347239b64fcfc8c67c540d7a7179c926de/solr-solrj-3.5.0.jar 
:findSolrJar UP-TO-DATE 

BUILD SUCCESSFUL 

Total time: 2.248 secs 

có cách nào tốt hơn để làm điều này?

Trả lời

24

Mã của bạn có thể được đơn giản hóa một chút, ví dụ: project.configurations.compile.find { it.name.startsWith("solr-solrj-") }.

20

Bạn cũng có thể tạo cấu hình chuyên dụng cho một tạo phẩm để giữ cho nó sạch sẽ; và sử dụng asPath nếu thực tế là nó có khả năng có thể trở lại một số địa điểm hoạt động tốt đối với trường hợp sử dụng của bạn (sẽ xảy ra nếu nó giải quyết cùng jar trong một số địa điểm):

configurations { 
    solr 
} 

dependencies { 
    solr 'org.apache.solr:solr-solrj:3.5.0' 
} 

task findSolrJars() { 
    println configurations.solr.asPath 
} 

Để tránh copy-paste, trong trường hợp bạn cũng cần rằng jar trong compile cấu hình, bạn có thể thêm cấu hình chuyên dụng này vào compile một, như:

dependencies { 
    solr 'org.apache.solr:solr-solrj:3.5.0' 
    compile configurations.solr.dependencies 
} 
1

Sau đây là cách tôi đã làm nó:

project.buildscript.configurations.classpath.each { 
    String jarName = it.getName(); 
    print jarName + ":" 
} 
+1

':' không hoạt động trên Windows bằng cách này. Sử dụng 'File.pathSeparator' có thể sửa lỗi đó. – Chilloutman

+0

@Chilloutman Tôi đồng ý. Không mã cứng đường phân cách đường dẫn. –

1

Tôi cần lombok.jar làm cờ xây dựng java để gwt xây dựng công việc này tuyệt vời!

configurations { 
lombok 
} 
dependencies { 
    lombok 'org.projectlombok:lombok+' 
} 
ext { 
    lombok = configurations.lombok.asPath 
} 

compileGwt { 
    jvmArgs "-javaagent:${lombok}=ECJ" 
} 

Tôi đã ngạc nhiên rằng độ phân giải đã hoạt động đủ sớm trong giai đoạn cấu hình, nhưng có.

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