2012-07-13 6 views
108

Tôi đang làm việc với một dự án mã nguồn mở được xây dựng với gradle. Tôi muốn tạo một tập tin (project) -sources.jar mà tôi có thể tải vào IDE của tôi (IntelliJ IDEA) và gỡ lỗi thông qua dự án. Tôi biết làm thế nào để tải các tập tin nếu tôi có thể tạo ra nó.Làm thế nào để xây dựng các nguồn jar với gradle

Tôi đã xem xét các tác vụ có sẵn cho dự án và không có công cụ nào tạo tệp jar nguồn.

Cách dễ nhất để tạo tệp jar nguồn cho dự án này là gì?

Việc thêm nguồn vào tệp jar chứa các tệp lớp được biên dịch cũng sẽ ổn.

Trả lời

191
task sourcesJar(type: Jar, dependsOn: classes) { 
    classifier = 'sources' 
    from sourceSets.main.allSource 
} 

task javadocJar(type: Jar, dependsOn: javadoc) { 
    classifier = 'javadoc' 
    from javadoc.destinationDir 
} 

artifacts { 
    archives sourcesJar 
    archives javadocJar 
} 
+3

Tôi chấp nhận câu trả lời này dựa trên o n các chi tiết cụ thể và giả định của tôi nó hoạt động trên các dự án gradle sử dụng plugin java. Thật không may, nó không hoạt động trong trường hợp của tôi vì dự án tôi đang sử dụng không sử dụng plugin java. Lỗi tôi nhận được là "Không thể tìm thấy thuộc tính 'sourceSets' trên tác vụ ': sourcesJar'." –

+0

Trong trường hợp quan trọng, dự án được gọi là hsqldb 2.2.8. –

+0

Trong trường hợp của tôi, thuộc tính allSource không nhận các tệp .java, tôi đã phải thay đổi tác vụ sourcesJar của mình để sử dụng: từ sourceSets.main.java, sourceSets.main.resources –

29

Nếu bạn muốn thêm nguồn để biên soạn tập tin JAR lớp, mà bạn cũng cho biết sẽ được chấp nhận, bạn có thể làm điều đó một cách dễ dàng đủ. Chỉ cần thêm phần sau vào tệp xây dựng của bạn. Bạn có thể thấy rằng, về mặt lý thuyết, nó là khá giống như các giải pháp cho việc đưa nguồn vào một JAR riêng biệt:

jar { 
    from sourceSets.main.allSource 
} 

Sự khác biệt là bạn đang thêm nó vào tập tin JAR chính bằng cách nói "jar" thay cho sourcesJar.

+0

Trong hệ thống gradle của Android, tôi nhận được lỗi này: "Không thể tìm thấy phương thức jar() cho các đối số về dự án của loại org.gradle.api.Dự án " – iamreptar

+0

@iamreptar Bạn có lẽ nên hỏi Giordano (tác giả của câu trả lời tiếp theo) về điều đó để thay thế. Tôi không phải là nhà phát triển Android. Http://stackoverflow.com/a/28969412/1480995 –

43

Nếu bạn đang sử dụng Android:

task sourcesJar(type: Jar) { 
    from android.sourceSets.main.java.srcDirs 
    classifier = 'sources' 
} 

task javadoc(type: Javadoc) { 
    source = android.sourceSets.main.java.srcDirs 
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) 
} 

task javadocJar(type: Jar, dependsOn: javadoc) { 
    classifier = 'javadoc' 
    from javadoc.destinationDir 
} 

artifacts { 
    archives javadocJar 
    archives sourcesJar 
} 

từ here

8

này nên làm việc

assemble.dependsOn 'propertyJar' 

task propertyJar(type: Jar) { 
archiveName = "myJarName.jar" 
from('src/main/resources') { 
    include '**' 
}} 
+1

^cho this 'assemble.dependsOn 'một phần, mà làm cho nhiệm vụ này chạy tự động. – Jarekczek

-1

DSL Kotlin tương đương sẽ là:

tasks { 

    val sourcesJar by creating(Jar::class) { 
     dependsOn(JavaPlugin.CLASSES_TASK_NAME) 
     classifier = "sources" 
     from(java.sourceSets["main"].allSource) 
    } 

    val javadocJar by creating(Jar::class) { 
     dependsOn(JavaPlugin.JAVADOC_TASK_NAME) 
     classifier = "javadoc" 
     from(java.docsDir) 
    } 

    artifacts { 
     add("archives", sourcesJar) 
     add("archives", javadocJar) 
    } 
}