最近被gradle折騰的欲仙欲死。java
gradle想把全部依賴打進jar包主要有兩種方式:一種是重寫jar動做,一種是用第三方插件。git
爲了裝x,我一直都是用的第一種方式,結果出了問題解決不了,爲了避免影響進度,只能先用第三方了。github
主要是into這一句,能夠參照gradle的api文檔。裏面專門講了這一塊。apache
這種方式生成的jar包,是把全部的依賴所有打進了lib中。我一直在用這種方式打包。api
而後在用spark-submit提交任務的時候,仍然會出現缺包的問題,好比我在運行spark-streaming程序的時候,就是死活找不到KafkaUtil$。可是相關的jar包的確是打進去了,百思不得其解。markdown
因此就用了下面這種方式。app
jar {
manifest { //incubating版本,之後版本可能會改API
attributes("Main-Class": "com.KafkaWordCount",
"Implementation-Title": "Gradle")
}
into('lib') {
from configurations.runtime
}
}
貼了一整個個人測試程序。maven
這種方式在使用spark提交任務的時候就OK了。ide
plugins {
id 'com.github.johnrengelman.shadow' version '1.2.3'
id 'java'
id 'scala'
id 'idea'
id 'application'
}
group 'com.lagou'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.7
targetCompatibility = 1.7
mainClassName="com.KafkaWordCount"
repositories {
mavenLocal() //使用maven本地庫
mavenCentral()
}
ext{
scala_version = '2.10.6'
kafka_version = '0.8.2.2'
spark_version = '1.6.0'
}
//使用shadow插件打包,代替jar功能。
jar {
manifest { //incubating版本,之後版本可能會改API
attributes("Main-Class": "com.KafkaWordCount",
"Implementation-Title": "Gradle")
}
}
dependencies {
//scala
compile "org.scala-lang:scala-library:$scala_version"
compile "org.scala-lang:scala-compiler:$scala_version"
//spark
compile "org.apache.spark:spark-core_2.10:$spark_version"
compile "org.apache.spark:spark-streaming_2.10:$spark_version"
compile "org.apache.spark:spark-streaming-kafka_2.10:$spark_version"
//kafka
compile "org.apache.kafka:kafka_2.10:$kafka_version"
compile "org.apache.kafka:kafka-clients:$kafka_version"
//junit
testCompile group: 'junit', name: 'junit', version: '4.11'
}