2016-12-22 106 views
2

我目前正在將我的項目的構建系統從ANT遷移到gradle。所以我對gradle很新穎我的項目具有一個插件機制,可以動態加載配置在XML文件中的jar包。每個插件都在它自己的子項目中。 XML配置的條目如下所示特定庫的篩選器gradle配置

<?xml version="1.0" encoding="UTF-8"?> 
<implementation ...> 
    <repository>text</repository> 
    <classpath>library1.jar</classpath> 
    <classpath>library2.jar</classpath> 
    ... 
</implementation> 

我添加了一個XSL轉換前綴build文件夾中的正確的lib文件夾中的每個條目,使之在我的主要項目的運行任務使用。

對於在我的項目中創建的庫,這已經可以正常工作。但是,其中一些依賴於第三方庫,例如protobuf。

現在,我通過將所有引用的jar複製到lib文件夾來解決這個問題。我的build.gradle看起來如下

dependencies { 
    compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.1.0' 
    ... 
    compile project(':main') 
} 

task copyReferencedLibraries(type: Copy) { 
    into "$buildDir/libs" 
    from configurations.compile 
} 

jar { 
    dependsOn xslt 
    dependsOn copyReferencedLibraries 
    ... 
} 

但是,這會將所有庫(包括從主項目繼承的庫)複製到lib文件夾。超過我實際需要的。

我該如何過濾這些庫到本子項目中定義的庫,或者至少手動過濾我想要複製的庫?

回答

0

你可以在你的Copy任務只是過濾

task copyReferencedLibraries(type: Copy) { 
    into "$buildDir/libs" 
    from(configurations.compile) { 
     exclude 'some.jar', 'some-other.jar' 
     include 'some-required.jar', 'some-other-required.jar' 
    } 
} 

參考:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Copy.html

只是要小心你不排除二三線依賴(即由一個瓶子所需的罐子您使用) 。如果你這樣做,那麼你將不會得到編譯錯誤,當代碼被執行時會碰到缺失的依賴關係,你會得到運行時錯誤。