Gradle打jar包,包含所有依赖

前言

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

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

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

重写jar动作

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

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

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

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

jar {
    manifest {  //incubating版本,以后版本可能会改API
        attributes("Main-Class": "com.KafkaWordCount",
                   "Implementation-Title": "Gradle")
    }
    into('lib') {
        from configurations.runtime
    }
}

shadow

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

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

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'
}

转载于:https://www.cnblogs.com/dantezhao/p/5365140.html

### 使用 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、付费专栏及课程。

余额充值