gradle和maven、ant相比,使用起来方便了好多。
记下自己用过的build.gradle(类似maven的pom.xml)模版, 以及碰到并解决的一些小问题:
****************************************************************************************************************
apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'scala'
sourceSets {
main{
scala {
srcDirs = ['src/main/scala', 'src/main/java']
}
apply plugin: 'java'
apply plugin: 'scala'
sourceSets {
main{
scala {
srcDirs = ['src/main/scala', 'src/main/java']
}
java {
srcDirs = []
}
}
}
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
compile "org.scala-lang:scala-library:2.10.4"
compile "org.scala-lang:scala-reflect:2.10.4"
compile "org.scala-lang:scala-compiler:2.10.4"
compile "org.apache.spark:spark-streaming_2.10:1.3.0"
compile "org.apache.spark:spark-streaming-kafka_2.10:1.3.0"
}
task "createProject" {
sourceSets*.scala.srcDirs*.each { it.mkdirs() }
sourceSets*.java.srcDirs*.each { it.mkdirs() }
sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}
jar {
zip64 true
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
manifest {
attributes "Main-Class": "com.test.myClass"
}
}
}
}
****************************************************************************************************************
使用步骤(先要安装好java, scala及gradle, 并配置好环境变量):
1> mkdir /home/test/my_project
2> cd /home/test/my_project
3> gradle createProject
这是的目录结构如下:
my_project:
scala, java, resources
4> 项目的配置文件等资源放在resources中,无论scala和java中都可以直接调用文件名
5> 编译并打包: gradle jar
6> 最终打包好的jar包在 /home/test/my_project/build/libs/目录下
上文是最终测试过的版本,期间碰到过的问题如下:
1. scala文件中调用自定义java类编译不通过,提示找不到自定义的java类
解决方案见上文main{ ... }部分,通过将 src/main/java添加入 scala { srcDirs [ ... ] }
2. Exception in thread "main" java.lang.SecurityException: invalid signature file digest for Manifest main attributes
通过 jar {...}中的exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA' 语句来解决
3. 当编译jar包过大时(此处仅供举例,真正开发时不建议构建如此大的jar包),提示出错 ... more than 65535 files ...
解决方案见上文main{ ... }中第一行: zip64 true