Gradle打jar包,包含所有依赖

博客主要讲述了使用Gradle将所有依赖打进Jar包的两种方式,即重写jar动作和使用第三方插件。重写jar动作虽能将依赖打进lib,但提交Spark任务时会出现缺包问题;而使用第三方插件shadow方式提交Spark任务则正常。

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

前言

最近被gradle折腾的欲仙欲死。

gradle想把所有依赖打进jar包主要有两种方式:一种是重写jar动作,一种是用第三方插件。

为了装x,我一直都是用的第一种方式,结果出了问题解决不了,为了不影响进度,只能先用第三方了。

重写jar动作

主要是into这一句,可以参照gradle的api文档。里面专门讲了这一块。

这种方式生成的jar包,是把所有的依赖全部打进了lib中。我一直在用这种方式打包。

然后在用spark-submit提交任务的时候,仍然会出现缺包的问题,比如我在运行spark-streaming程序的时候,就是死活找不到KafkaUtil$。但是相关的jar包的确是打进去了,百思不得其解。

所以就用了下面这种方式。


 
  1. jar {

  2. manifest { //incubating版本,以后版本可能会改API

  3. attributes("Main-Class": "com.KafkaWordCount",

  4. "Implementation-Title": "Gradle")

  5. }

  6. into('lib') {

  7. from configurations.runtime

  8. }

  9. }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

shadow

贴了一整个我的测试程序。

这种方式在使用spark提交任务的时候就OK了。


 
  1. plugins {

  2. id 'com.github.johnrengelman.shadow' version '1.2.3'

  3. id 'java'

  4. id 'scala'

  5. id 'idea'

  6. id 'application'

  7. }

  8.  
  9. group 'com.lagou'

  10. version '1.0-SNAPSHOT'

  11.  
  12. sourceCompatibility = 1.7

  13. targetCompatibility = 1.7

  14.  
  15. mainClassName="com.KafkaWordCount"

  16.  
  17. repositories {

  18. mavenLocal() //使用maven本地库

  19. mavenCentral()

  20. }

  21.  
  22.  
  23. ext{

  24. scala_version = '2.10.6'

  25. kafka_version = '0.8.2.2'

  26. spark_version = '1.6.0'

  27. }

  28.  
  29. //使用shadow插件打包,代替jar功能。

  30. jar {

  31. manifest { //incubating版本,以后版本可能会改API

  32. attributes("Main-Class": "com.KafkaWordCount",

  33. "Implementation-Title": "Gradle")

  34. }

  35. }

  36.  
  37. dependencies {

  38. //scala

  39. compile "org.scala-lang:scala-library:$scala_version"

  40. compile "org.scala-lang:scala-compiler:$scala_version"

  41. //spark

  42. compile "org.apache.spark:spark-core_2.10:$spark_version"

  43. compile "org.apache.spark:spark-streaming_2.10:$spark_version"

  44. compile "org.apache.spark:spark-streaming-kafka_2.10:$spark_version"

  45. //kafka

  46. compile "org.apache.kafka:kafka_2.10:$kafka_version"

  47. compile "org.apache.kafka:kafka-clients:$kafka_version"

  48. //junit

  49. testCompile group: 'junit', name: 'junit', version: '4.11'

  50. }

### 使用 Gradle 构建 Java 项目并生成 JAR 文件 #### 创建 `build.gradle` 文件 为了使用 Gradle 来构建 Java 应用程序并将其实体化为 JAR 文件,需要创建一个名为 `build.gradle` 的配置文件。此文件定义项目的依赖项和其他必要的属性。 ```groovy plugins { id 'java' } group = 'com.example' version = '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testImplementation('org.junit.jupiter:junit-jupiter-api:5.7.0') testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine:5.7.0') } ``` 这段脚本应用了 Java 插件来简化常见的 Java 编程任务,并指定了 Maven Central 作为库的存储库位置[^4]。 #### 执行构建命令 一旦有了上述配置文件,在命令行中输入 `gradle build` 即可触发整个构建过程,括编译源码、执行单元测试以及最终将所有类打成单个 JAR 文件[^1]: ```bash $ gradle build ``` 当运行这条指令Gradle 将自动处理所有的子步骤——从下载所需的外部库到实际创建输出工件(即 `.jar`)。如果一切顺利的话,新生成的 JAR 文件将会位于项目的 `build/libs/` 子目录下。 #### 关于 JDK 版本的选择 值得注意的是,用于执行这些操作的具体版本取决于几个因素。在 Android Studio 内通过界面启动 Gradle 或者是在其内置终端里调用的情况下,默认采用 IDE 自身所指定的那个 JDK;而如果是直接在外置 shell 终端里面发出请求,则优先考虑由环境变量 `JAVA_HOME` 明确指出的那一套开发工具。假如这个变量不存在,则尝试查找路径中的第一个可用实例[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值