spark streaming---使用gradle混合编译Scala和Java项目并打包

本文介绍了如何使用Gradle进行Scala和Java混合编译的项目配置,提供了一个build.gradle模板,并详细说明了编译和打包过程。在遇到问题时,例如Scala调用Java类编译失败、jar签名错误以及大文件数量限制等问题,文章提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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']
              }
              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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值