2015-01-13 82 views
2

我正在使用gradle爲我們的java項目構建一個JNI庫,但它工作正常,但是我似乎無法弄清楚如何保持gradle不會構建文件的共享和靜態版本。我想禁用靜態庫的構建以加快構建過程。添加「共享」標籤似乎沒有辦法。在Gradle中禁用靜態庫生成

從gradle這個構建文件:

libraries { 
    bulletjme { 
     shared 
    } 
} 

的gradle這個手冊指出,「例如,當您定義庫調用的HelloWorld,並建立在Linux上,將搖籃,默認情況下,生產libhelloworld.so和libhelloworld 。二進制文件「。但是它並沒有說如何禁用任何一個二進制文件的構建。

感謝您的任何答案!

+0

也許嘗試找到構建庫的靜態版本的任務,並將它的'enabled'屬性設置爲false。 – Opal

+0

謝謝,但這將是有點繁瑣,因爲他們自動生成至少6 os /平臺組合的任務.. – normen

+0

當時沒有其他想法:/ – Opal

回答

0

爲了保持從的gradle構建的靜態庫的「主要」部分,你必須的build.gradle以下代碼:

model { 
    components { 
     main(NativeLibrarySpec) { 
      sources { 
       c { 
        binaries.withType(StaticLibraryBinarySpec) { bin -> 
         binaries.remove(bin) 
        } 
       } 
      } 
     } 
    } 
} 
+0

這不適用於gradle 2.11 –

2

在搖籃2.11,這可以通過設置可建成立財產虛假。雖然文檔說它是隻讀的,但它確實有效。

model { 
    components { 
     library(NativeLibrarySpec) { 
      binaries.withType(StaticLibraryBinarySpec) { 
       buildable = false 
      } 
     } 
    } 
} 

當檢查組件輸出,搖籃,現在會說,圖書館是由用戶禁用:

$ gradle components 
... 
Binaries 
Shared library 'library:sharedLibrary' 
    build using task: :librarySharedLibrary 
    build type: build type 'debug' 
    flavor: flavor 'default' 
    target platform: platform 'linux_x86-64' 
    tool chain: Tool chain 'gcc' (GNU GCC) 
    shared library file: build/libs/library/shared/liblibrary.so 
Static library 'library:staticLibrary' (not buildable) 
    build using task: :libraryStaticLibrary 
    build type: build type 'debug' 
    flavor: flavor 'default' 
    target platform: platform 'linux_x86-64' 
    tool chain: Tool chain 'gcc' (GNU GCC) 
    static library file: build/libs/library/static/liblibrary.a 
    Disabled by user 

這也可以在全球一次處理所有庫:

model { 
    components { 
     libraryA(NativeLibrarySpec) 
     libraryB(NativeLibrarySpec) 
     all { 
      binaries.withType(StaticLibraryBinarySpec) { 
       buildable = false 
      } 
     } 
    } 
}