2015.09.14发布了Gradle版本2.7, 后续发布频率将更快,目标是每4-6周发布一个新版本。
重要:Gradle 2.6生成的wrapper性能很差
如果用Gradle 2.6生成Gradle wrapper,强烈建议用Gradle 2.7来生成gradle-wrapper.jar。2.6版本中新增的校验和验证功能会导致Gradle wrapper性能严重下降,这个问题会影响到通过wrapper来执行gradle时的启动时长,已经在2.7中修复。
另外,这只会影响由2.6生成的wrapper。如果使用2.6之前的版本生成的wrapper,则不受影响。
当通过HTTP/HTTPS向Maven或Ivy仓库认证时,Gradle尝试使用所有支持的认证方式来连接(NTLM, Kerberos, Digest, Basic). 2.7版本可以选择应当使用的认证方式,其他不需要的认证方式不再需要。用新的authentication元素来指定认证方式。例如,配置仅适用digest认证的库:
repositories { maven { url 'https://repo.mycompany.com/maven2' credentials { username 'user' password 'password' } authentication { digest(DigestAuthentication) } } }
当前版本仅有BasicAuthentication
和DigestAuthentication
方式可以明确配置,且只用于HTTP传输。
基于前面"选择HTTP认证方式", Gradle现在可对配置了BasicAuthentication认证的仓库抢先发送HTTP认证方式.
Gradle只有在server响应一个authentication challenge (401-UNAUTHORIZED)时才提交HTTP credentials。这可避免在不需要时发送未加密的credentials。但在某些情况下,server会回一个不同的响应来请求需要认证的资源(例如GitHub会返回一个404-NOT-FOUND),这会使依赖解析失败。
为了解决这个问题,可以先将credentials发送给server。当一个repository明确配置使用BasicAuthentication
方式时,Gradle 将对每个请求都抢先发送credentials:
authentication { basic(BasicAuthentication) // 使能抢先认证 }
Gradle前面的版本中引入了Gradle TestKit 用于Gradle插件的功能测试。
这个版本中在已有的TestKit feature set基础上, 增加了Test execution isolation。测试执行现在可在一个隔离的"工作空间"执行,以便防止测试build会继承当前用户的环境配置。
TestKit使用专用的,可重用的Gradle daemon进程;在执行完一个build的所有功能测试后,这些daemon进程就结束掉。
continuous运行时
(incubating特性)Gradle Play plugin 初次发布允许以持续build方式来开发Play应用程序,当重新build时可自动重新加载资源和应用class。 但是当出现一次build失败时,Gradle只是简单地停止运行应用程序。
当运行Gradle 2.7时,当build失败时将重新加载Play应用程序, 在浏览器中显示所有的build失败消息。
在这个版本中,'play'插件已更新支持Play 2.4版本,并支持新的injected routes generator。
可以配置routes compiler来使用injected routes generator, 通过对play
component使用一个新的配置选项 :
model { components { play { injectedRoutesGenerator = true } } }
Gradle缺省将使用static routes generator。
管理类型现在支持所有基本类型 (boolean
, byte
, char
, short
, int
, long
, float
and double
)的properties, 及其封装类型(分别是Boolean
, Byte
, Character
, Short
, Integer
, Long
, Float
and Double
)的properties。基本类型的boolean
properties可以用经典的getter或者is-风格的getter来声明。例如:
@Managed interface ManagedType { boolean getEnabled() void setEnabled(boolean enabled) boolean isActive() void setActive(boolean active) int getCount() void setCount(int value) }
boolean
property可以有一个get以及一个
is
getter。
这个版本对JVM组件引入新的依赖管理特性,这是朝着full variant-aware dependency resolution的一个重要步骤。这个特性是建立在new rule based model configuration 基础上,需要使用新的jvm-component
插件:
plugins { id 'jvm-component' id 'java-lang' }
定义的JvmLibrarySpec
可以声明API依赖于任何其他本地生成的库。这包括在同一个Gradle项目中其他的JvmLibrarySpec
实例,以及在一个多项目的build中其他项目中声明的JvmLibrarySpec
组件。
model { components { main(JvmLibrarySpec) { targetPlatform 'java7' targetPlatform 'java8' sources { java { dependencies { library 'commons' } } } } commons(JvmLibrarySpec) { targetPlatform 'java7' } } }
对配置生成多个不同平台的JvmLibrarySpec来说,
Gradle将根据依赖的库来生成并解析一个兼容的二进制variant。在上面例子中,Gradle将生成'main'库组件的两个JAR文件,一个使用JDK 1.7,另一个使用JDK 1.8。这两个编译都依赖于JDK 1.7 Jar variant 的'commons'库。
2015.08.10发布了Gradle版本2.6,在Gradle 2.6版本中,容器与Servers称为一等公民。Linkedin宣布开源其Gradle Hadoop toolchain, 这超越了Gradle之前经典的编译平台的工作。后续将发布突破性的SaaS平台Gradle.com, 业界对Grdle人才需求量也日益增大,将推出Gradle认证体系。
Linkedin, Google Android, Twitter都在大力支持Gradle。
Gradle工具已经不只是编译和依赖管理工具,它就像是瑞士陆军军刀一样,每个Android开发人员都需要学好使用它。使用Cucumber和Appium构建自动化UI测试套件,并与持续集成结合。
第1-10章的翻译,不含第9章,http://pkaq.github.io/gradledoc/docs/userguide/userguide.html
第9,11-39章的翻译链接:http://blog.csdn.net/maosidiaoxian/
最好的一本介绍Gradle的书籍:Gradle in Action, 2014年出版。
其他参考资料:
[1] http://gradle.org/books/
[2] https://docs.gradle.org/2.6/release-notes