2015-08-18 56 views
2

我在gradle java項目上有一個新手問題。我希望將這個輸出工件jar配置爲只包含來自我的項目的某些類。我將所需的類包含在文件中,如classes.txt,它是作爲單獨任務的一部分生成的。應該如何配置gradle build的jar任務,以便做到這一點。這是我到目前爲止已經試過:在Gradle構建中包含jar歸檔中的特定類

jar { 
    // reset actions 
    actions = [] 
    copy { 
     def dependentClasses = file("classes.txt") 
     if (dependentClasses.exists()) { 
      dependentClasses.eachLine { include it } 
     } 

     from sourceSets.main.output 
     includeEmptyDirs = false 
     into "build/tmp/jar" //Some temporary location 
    } 
    // How to zip the contents? 
} 

我很遺憾的可能是幼稚的問題,但我還沒有看到有其他的解決方案運氣。

謝謝!

回答

1

用歐泊的答案,這裏是答案包含文件的

apply plugin: 'java' 

jar { 
    def included = project.file('classes.txt').readLines() 
    include { f -> 
     included.any { i -> f.isDirectory() ? true : f.path.replaceAll(File.separator, '.').contains(i) } 
    } 
} 

輕微的訣竅是,FileTreeElementf被傳遞給closure也有通過包目錄,如果出現這種情況返回false ,下面的子樹不會被遍歷,因此檢查它是一個返回true的目錄來啓用子樹的處理。

解決方案示例爲here,並且將包含Lol1.class。感謝您的幫助,Opal!

1

它可以通過以下方式進行:

apply plugin: 'java' 

jar { 
    def excluded = project.file('classes.txt').readLines() 

    exclude { f -> 
     excluded.any { e -> f.path.replaceAll(File.separator, '.').contains(e) } 
    } 
} 

演示可以發現hereLol1.class將被排除在外。

+0

謝謝@Opal - 我正在尋找包括特定的類而不是排除,但我猜測解決方案應該是類似的 - 將嘗試它並讓你知道。但是,如果您知道解決方案不在您的頭頂,您可以在此自行編輯它?順便說一句,喜歡系統的Github代碼演示組織! – Kilokahn

+0

不幸的不是。包括不處理單個文件,但組或模式。 Github演示不是系統的;] – Opal

+0

您可以發佈/編輯代碼以匹配模式嗎?我猜如果我們傳遞與每個類相對應的特定模式,我們可以達到相同的效果?道歉,如果我完全瞭解我的理解...... – Kilokahn

相關問題