关于我对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.name
Executable
$buildDir
/binaries/$binary.name
/$component.name
Library
SharedLibraryBinary
$component.name
SharedLibrary
$buildDir
/binaries/$binary.name
/lib$component.name
.so
Library
StaticLibraryBinary
$component.name
StaticLibrary
$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++源代码的LanguageSourceSet
s。
'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 提供的那样。
测试执行的的实时反馈。
支持另外的测试框架。
新闻热点
疑难解答