關于我對Gradle的翻譯,以Github上的項目及http://gradledoc.qiniudn.com 上的文檔為準。如發現翻譯有誤的地方,將首先在以上兩個地方更新。因時間精力問題,博客中發表的譯文基本不會同步修改。
另外,目前Gradle1.12版本的文檔進入校稿階段,校稿的方式可以為到該項目https://github.com/msdx/gradledoc 提交issue或是pull request。校稿的結果不只是在此版本更新,也會用于改善Gradle下一版本(2.0)文檔的翻譯。
Gradle 對構建原生二進制文件的支持目前還是孵化階段。請務必注意,在以后的 Gradle 版本中,相關的 DSL 和其他配置可能會有所改變。
不同的原生二進制插件添加了對從C++,C,Objective-C,Objective-C++以及匯編源文件構建原生軟件組件的支持。雖然對于這種軟件開發的空間,已經有許多優秀的構建工具存在,但是Gradle 向開發人員提供的是它的強大特征和靈活性,以及在依賴管理實踐上,在JVM開發空間上更為傳統的發現。
Gradle 提供了使用不同的工具鏈執行相同的構建的能力。你可以通過更改操作系統的PATH讓其包含所需的工具鏈編譯器,來控制使用哪個工具鏈。或者,你可以直接配置工具鏈,就如下面的“原生二進制變種”中描述的。
支持以下的工具鏈:
| 操作系統 | 工具鏈 | 備注 |
| linux | GCC | |
| Linux | Clang | |
| Mac OS X | GCC | 使用 XCode 中的 GCC。 |
| Mac OS X | Clang | 使用 XCode 中的 Clang。 |
| Windows | Visual C++ | Windows xp及以上,Visual C++ 2010 及以上版本。 |
| Windows | GCC | Windows XP及以上,使用Cygwin的GCC。 |
| Windows | MinGW | Windows XP 及以上。 |
一個原生二進制PRoject定義了一組Executable和Library組件,每一個的 Gradle 都映射大量的NativeBinary輸出。對于每個定義的executable或library,Gradle 添加了具有相同名稱的FunctionalSourceSet 。這些功能源碼集將為project所支持的每一種語言包含指定語言的源碼集。
為構建一個靜態或共享的原生庫二進制文件,一個Library組件將添加到libraries容器中。每個library組件可以產生至少一個SharedLibraryBinary和至少一個StaticLibraryBinary。
示例 54.1. 定義一個庫組件
build.gradle
ExecutableBinary$component.nameExecutable$buildDir/binaries/$binary.name/$component.nameLibrarySharedLibraryBinary$component.nameSharedLibrary$buildDir/binaries/$binary.name/lib$component.name.soLibraryStaticLibraryBinary$component.nameStaticLibrary$buildDir/binaries/$binary.name/$component.name.a對于每個產生的可執行二進制文件, cpp插件提供了install${binary.name}任務,這個任務可以創建該可執行文件及它需要的共享庫的開發安裝。它允許你運行可執行文件,而無需在其最終的位置安裝共享庫。
目前,Gradle 支持從C++,C,Assembler,Objective-C 和 Objective-C++源碼的任意組合中構建原生二進制文件。一個原生二進制project 將包含一個或多個叫做FunctionalSourceSet的實例(如"main","test"等),其中每一個都可以包含含有C++,C,Assembler,Objective-C或Objective-C++源代碼的LanguageSourceSets。
'cpp' 插件提供了C++ 語言的支持。
示例 54.3. cpp 插件
build.gradle
示例 54.5. “C” 插件
build.gradle
示例 54.3. assembler 插件
build.gradle
示例 54.8. “objective-c”插件
build.gradle
示例 54.9. “objective-cpp” 插件
build.gradle
Clang
VisualCpp
示例 54.26. 定義工具鏈
build.gradle
apply plugin: "c"apply plugin: "cunit"model { flavors { passing failing } repositories { libs(PrebuiltLibraries) { cunit { headers.srcDir "lib/cunit/2.1-2/include" binaries.withType(StaticLibraryBinary) { staticLibraryFile = file("lib/cunit/2.1-2/lib/" + findCUnitLibForPlatform(targetPlatform)) } } } }}libraries { operators {}}binaries.withType(TestSuiteExecutableBinary) { lib library: "cunit", linkage: "static" if (flavor == flavors.failing) { cCompiler.define "PLUS_BROKEN" }}注意︰ 此示例的代碼可以在Gradle 的 binary 或 source 分發包的samples/native-binaries/cunit中找到。。
> gradle -q runFailingOperatorsTestCUnitExeThere were test failures: 1. /home/user/gradle/samples/native-binaries/cunit/src/operatorsTest/cunit/test_plus.c:6 - plus(0, -2) == -2 2. /home/user/gradle/samples/native-binaries/cunit/src/operatorsTest/cunit/test_plus.c:7 - plus(2, 2) == 4:runFailingOperatorsTestCUnitExe FAILEDBUILD FAILEDTotal time: 1 secs當前對 CUnit 的支持還是相當簡陋。未來的集成計劃包括:
允許測試聲明為 javadoc 風格的注解。
改進 HTML 報告,類似于 JUnit 提供的那樣。
測試執行的的實時反饋。
支持另外的測試框架。
新聞熱點
疑難解答