Gradle 1.12用户指南翻译——第二十五章. Scala 插件
其他章节的翻译请参见:
http://blog.csdn.net/column/details/gradle-translation.html
翻译项目请关注Github上的地址:
https://github.com/msdx/gradledoc/tree/1.12。
直接浏览双语版的文档请访问:
http://gradledoc.qiniudn.com/1.12/userguide/userguide.html。
另外,Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,目前0.2版本兼容2.1以上(5.0没试过)的Android系统,地址如下:
http://www.wandoujia.com/apps/com.githang.gradledoc
翻译不易,转载请注明本文在CSDN博客上的出处:
http://blog.csdn.net/maosidiaoxian/article/details/45476579
关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qiniudn.com 上的文档为准。如有发现翻译有误的地方,将首先在以上两个地方更新。因时间精力问题,博客中发表的译文基本不会同步修改。
第二十五章. Scala 插件
Scala 的插件继承自 Java 插件并添加了对 Scala 项目的支持。它可以处理 Scala 代码,以及混合的 Scala 和 Java 代码,甚至是纯 Java 代码(尽管我们不一定推荐使用)。该插件支持联合编译,联合编译可以通过
Scala 及 Java 的各自的依赖任意地混合及匹配它们的代码。例如,一个 Scala 类可以继承自一个 Java 类,而这个 Java 类也可以继承自一个 Scala 类。这样一来,我们就能够在项目中使用最适合的语言,并且在有需要的情况下用其他的语言重写其中的任何类。
25.1. 用法
要使用 Scala 插件,请在构建脚本中包含以下语句:
示例 25.1. 使用 Scala 插件
build.gradle
apply plugin: 'scala'
25.2. 任务
Scala 的插件向project 中添加了以下任务。
表 25.1. Scala 插件 - 任务
| 任务名称 | 依赖于 | 类型 | 描述 |
compileScala |
compileJava |
ScalaCompile |
编译production 的 Scala 源文件。 |
compileTestScala |
compileTestJava |
ScalaCompile |
编译test 的 Scala 的源文件。 |
compile |
compile |
ScalaCompile |
编译给定的source set 里的 Scala 源文件。 |
scaladoc |
- |
scaladoc |
为production 里的 Scala 源文件生成 API 文档。 |
Scala 插件向 Java 插件所加入的 tasks 添加了以下的依赖。
表 24.2. Scala感觉 插件 - 额外的task 依赖
| 任务名称 | 依赖于 |
classes |
compileScala |
testClasses |
compileTestScala |
|
compile |
图 25.1. Scala 插件-任务
25.3. 项目布局
Scala 插件会假定如下所示的项目布局。所有 Scala 的源目录都可以包含 Scala<s1><e2>和</e2></s1>Java 代码。Java 源目录只能包含 Java 源代码。这些目录不一定是存在的,或是里面包含有什么内容;Scala 插件只会进行编译,而不管它发现什么。
表 25.3. Scala 插件 - 项目布局
| 目录 | 意义 |
src/main/java |
产品的Java源代码 |
src/main/resources |
产品的资源 |
src/main/scala |
Production Scala 源代码。此外可能包含联合编译的 Java 源代码。 |
src/test/java |
Java 测试源代码 |
src/test/resources |
测试资源 |
src/test/scala |
Test Scala 源代码。此外可能包含联合编译的 Java 源代码。 |
src/ |
给定的源集的Java源代码 |
src/ |
给定的源集的资源 |
src/ |
给定的source set 的 Scala 源代码。此外可能包含联合编译的 Java 源代码。 |
25.3.1. 更改项目布局
和 Java 插件一样,Scala 插件允许把 Scala 的production 和test 的源文件配置为自定义的位置。
示例 24.2. 自定义 Scala 源文件布局
build.gradle
sourceSets {
main {
scala
srcDirs = ['src/scala']
}
}
test {
scala
srcDirs = ['test/scala']
}
}
}
25.4. 依赖管理
Scala 项目需要声明一个scala-library依赖项。这个依赖会在编译和运行的类路径时用到。它还将用于分别获取Scala
编译器及 Scaladoc 工具。[12]
如果 Scala 用于production 代码, scala-library 依赖应该添加到compile的配置中:
示例 25.3. 为production 代码定义一个Scala 依赖
build.gradle
repositories {
mavenCentral()
}
dependencies {
compile 'org.scala-lang:scala-library:2.9.1'
}
如果 Scala 仅用于测试代码, scala-library依赖应被添加到testCompile配置中:
示例 25.4. 为 test 代码定义一个Scala 依赖
build.gradle
dependencies {
testCompile "org.scala-lang:scala-library:2.9.2"
}
25.5.
scalaClasspath 的自动配置
ScalaCompile和ScalaDoc tasks
会以两种方式使用 Scala: 在它们的classpath以及scalaClasspath上。前者用于在源代码中查找类的引用,通常会包含 scala-library和其他库。后者用来分别加载和执行
Scala 编译器和 Scala 工具,并且应该只包含 scala-library及其依赖项。
除非显式配置了一个 task 的scalaClasspath ,否则
Scala(基础)插件会尝试推断该 task 的classpath。以如下方式进行:
- 如果在
classpath中找到scala-libraryJar
,并且该项目已经在至少一个仓库中声明了它,那么相应的scala-compiler的仓库依赖将添加到scalaClasspath中。 - 其他情况,该task 将执行失败,并提示无法推断
scalaClasspath。
25.6. 公约属性
Scala 插件没有向 project 添加任何的公约属性。
25.7. source
set 属性
Scala 的插件向 project 的每一个source set 添加了下列的公约属性。你可以在你的构建脚本中,把这些属性当成是source set 对象中的属性一样使用 (见第
21.3,“公约”)。
表 25.4. Scala 插件 - source set 属性
| 属性名称 | 类型 | 默认值 | 描述 |
scala |
SourceDirectorySet (read-only) |
非空 |
该source set 中的 Scala 源文件。包含在 Scala 源目录中找到的所有的.scala和.java文件,并排除所有其他类型的文件。 |
scala.srcDirs |
Set<File>.可以使用16.5 章节,"指定一组输入文件"中所讲到的任何一个来设置。 |
[ |
源目录包含该 source set 中的 Scala 源文件。此外可能还包含用于联合编译的 Java 源文件。 |
allScala |
FileTree (read-only) |
非空 |
该source set 中的所有 Scala 源文件。包含在 Scala 源目录中找到的所有的.scala文件。 |
这些属性由一个ScalaSourceSet 的约定对象提供。
Scala 的插件还修改了一些 source set 的属性:
表 25.5. Scala 插件 - source set 属性
| 属性名称 | 修改的内容 |
allJava |
添加在 Scala 源目录中找到的所有.java文件。 |
allSource |
添加在 Scala 的源目录中找到的所有源文件。 |
25.8. Fast
Scala Compiler
Scala 插件包含了对fsc,即
Fast Scala Compiler 的支持。fsc运行在一个单独的进程中,并且可以显著地提高编译速度。
示例 25.5. 启用 Fast Scala Compiler
build.gradle
compileScala
scalaCompileOptions.useCompileDaemon = true
// optionally specify host and port of the daemon:
scalaCompileOptions.daemonServer = "localhost:4243"
}
注意,每当 fsc的编译类路径的内容发生变化时,它都需要重新启动。(它本身不会去检测编译类路径的更改。)这使得它不太适合于多项目的构建。
25.9. 在外部进程中编译
当scalaCompileOptions.fork设置为true时,编译会在外部进程中进行。fork
的详细情况依赖于所使用的编译器。基于 Ant 的编译器 (scalaCompileOptions.useAnt) 将为每个
= trueScalaCompile任务fork
一个新进程,而默认情况下它不进行fork。基于 Zinc 的编译器 (scalaCompileOptions.useAnt) 将利用 Gradle 编译器守护进程,且默认情况下也是这样。
= false
外部过程默认使用JVM 的的默认内存设置。如果要调整内存设置,请根据需要配置scalaCompileOptions.forkOptions :
示例 25.6. 调整内存设置
build.gradle
tasks.withType(ScalaCompile) {
configure(scalaCompileOptions.forkOptions) {
memoryMaximumSize = '1g'
jvmArgs = ['-XX:MaxPermSize=512m']
}
}
25.10. 增量编译
增量编译是只编译那些源代码在上一次编译之后有修改的类,及那些受这些修改影响到的类,它可以大大减少 Scala 的编译时间。频繁编译代码的增量部分是非常有用的,因为在开发时我们经常要这样做。
Scala 插件现在通过集成 Zinc 来支持增量编译,
它是sbt增量
Scala 编译器的一个单机版本。若要把ScalaCompile任务从默认的基于
Ant 的编译器切换为新的基于 Zinc 的编译器,需要将scalaCompileOptions.useAnt设置为false:
示例 25.7. 激活基于 Zinc 编译器
build.gradle
tasks.withType(ScalaCompile) {
scalaCompileOptions.useAnt = false
}
除非在API
文档中另有说明,否则基于 Zinc 的据编译器支持与基于 Ant 的编译器完全相同的配置选项。但是,要注意的是,Zinc 编译器需要 Java 6 或其以上版本来运行。这意味着 Gradle 本身要使用 Java 6 或其以上版本。
Scala 插件添加了一个名为zinc的配置,以解析
Zinc 库及其依赖。如果要重写 Gradle 默认情况下使用的 Zinc 版本,请添加一个显式的 Zinc 依赖项 (例如zinc)。无论使用哪一个 Zinc 版本,Zinc 都是使用在
"com.typesafe.zinc:zinc:0.1.4"scalaTools配置上找到的
Scala 编译器。
就像Gradle 上基于Ant 的编译器一样,基于 Zinc 的编译器支持 Java 和 Scala 代码的联合编译。默认情况下,在src/main/scala 下的所有
Java 和 Scala 代码都会进行联合编译。使用基于 Zinc 的编译器时,即使是 Java 代码也将会进行增量编译。
增量编译需要源代码的相关性分析。解析结果进入由 scalaCompileOptions.incrementalOptions.analysisFile 所指定的文件(它有一个合理的默认值)。在多项目构建中,分析文件被传递给下游的ScalaCompile任务,以启用跨项目的增量编译。对于由
Scala 插件添加的ScalaCompile任务,无需对这一点进行配置。对于其他的 ScalaCompile 任务,需要根据类文件夹或
Jar archive 的代码中,是哪一个的代码被传递给ScalaCompile任务的下游类路径,把ScalaCompileOptions.incrementalOptions.publishedCode配置为指向它们。注意,如果publishedCode设置不正确,上游代码发生变化时下游任务可能不会重新编译代码,导致编译结果不正确。
由于依赖分析的系统开销,一次干净的编译或在代码有了较大的更改之后的编译,可能花费的时间要长于使用基于 Ant 的编译器。对于 CI 构建和版本的构建中,我们目前推荐使用基于 Ant 的编译器。
注意现在 Zinc 基于守护进程模式的Nailgun 还不支持。相反,我们打算加强 Gradle 自己的编译器守护进程,使得在跨 Gradle 调用时继续存活,利用同一个 Scala 编译器。这将会为 Scala 编译带来另一个方面上的明显加速。
25.11. eclipse
集成
当 Eclipse 插件遇到 Scala 项目时,它将添加额外的配置,使得项目能够在使用 Scala IDE 时开箱即用。具体而言,该插件添加一个 Scala 性质和依赖的容器。
25.12. IntelliJ
集成
当 IDEA 插件遇到 Scala 项目时,它将添加额外的配置,使得项目能够在使用 IDEA 时开箱即用。具体而言,该插件添加了一个 Scala facet 和一个匹配项目的类路径上的 Scala 版本的 Scala 编译器类库。
Gradle 1.12用户指南翻译——第二十五章. Scala 插件的更多相关文章
- Gradle 1.12用户指南翻译——第二十九章. Checkstyle 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第二十六章. War 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第二十四章. Groovy 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第二十二章. 标准的 Gradle 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第二十八章. Jetty 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第三十一章. FindBugs 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第三十七章. OSGi 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第三十三章. PMD 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第二十一章. Gradle 插件
昨天晚上只顾着和女朋友看<匆匆那年>电视剧的最后几集,所以说好的Android文档<Gradle 插件用户指南>第五章自然也没翻译多少.所以今天也发不了第五章的翻译了,就发几个 ...
随机推荐
- The Zen Programmer
专注 何为专注 关于 休息 怎么睡觉 心无杂念 我的体会 自我分析 初学者心态 无我 不要设置职业目标 敏事慎言 正念 做自己的老板 玩物养志 结语 最近在研读Christian Grobmeier ...
- Redis集群教程(Redis cluster tutorial)
本博文翻译自Redis官网:http://redis.io/topics/cluster-tutorial 本文档以温和的方式介绍Redis集群,不使用复杂的方式来理解分布式系统的概念. ...
- EBS开发性能优化之SQL语句优化
(1)选择运算 尽可能先做选择运算,这是优化策略中最重要.最基本的一条,选择运算一般会使计算的中间结果大大变小,在对同一表格进行多个选择运算时,选择条件的排列顺序对性能也有很大影响,因为排列顺序不仅影 ...
- 信用卡3D验证相关资料
3D 验证服务,是银行与VISA .MASTERCARD国际组织联合推出的为保障银行维萨及万事达信用卡持卡客户网上交易安全,防范网上伪冒交易的一项信用卡网上支付安全验证服务( 维萨卡使用的验证服务叫& ...
- 详解EBS接口开发之供应商导入补充-供应商地点增加实例
DECLARE --v_org_id number; v_vendor_interface_id NUMBER; v_vendor_site_interface_id NUMBER; --接口表的id ...
- Python 键盘鼠标监听
异想天开的想记录一下自己每天的键盘键位走向,于是就在网上搜索了一下相关的实现,然后就发现了一个第三方的库pyHook.封装的很好,我们只需要傻瓜式的调用里面的API就可以了. 下面是我在使用pyHoo ...
- 算法之路(二)呈现O(logN)型的三个算法
典型时间复杂度 我们知道算法的执行效率,可以从它的时间复杂度来推算出一二.而典型的时间复杂度有哪些类型呢? 由上图,可以看出,除了常数时间复杂度外,logN型的算法效率是最高的.今天就介绍三种非常ea ...
- 关于V4L2中操作比较重要的几个命令以及一般操作流程总结
最近在做关于摄像头测试程序相关的一些开发,主要是想要实现在摄像头采集视频的过程中,通过按键来实现拍照,然后将拍照得到的数据保存到一个文件中,通过了解V4L2的一些相关操作,原来,拍照后的数据是保存在一 ...
- 11 OptionsMenu 菜单
OptionsMenu 选项菜单(系统菜单 ) OptionsMenu:系统级别菜单 菜单的使用步骤: 1. res里的menu里添加布局 在布局里写菜单项 2. 在逻辑代码中使用OnCreateOp ...
- Web Service进阶(一)运行原理
利用清明小假期,温习了一遍Web Service的相关内容,对其工作原理进行了简要总结.以供有需求的朋友和自己日后参考.文章若有不当之处,敬请朋友们提出宝贵建议,以求共勉. Web服务中,我们应该首先 ...