使用gradle打包jar包

使用gradle打包jar包

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

近期用android studio来做android开发的IDE,它是使用gradle来构建的,于是開始学习gradle.

如今有一个项目,里面有一个android-library的模块。我想在做release的时候,把这个模块中我写的代码编译并打包成jar包,而且和依赖的jar包拷贝出来,但android studio对android-library的管理是把其与依赖包打包成一个aar的包的,显示这不是我要的,于是便想用gradle来实现。

首先我找到的第一种方法是在模块中的build.gradle添加�一个编译jar包的task.代码例如以下:

task releaseJar(type:Jar) {
    from sourceSet.main.java
    destinationDir = file('build/libs')
}

可是运行的时候,却提示里面的Log类找不到。显示用这样的方法仅仅能编译一般的java文件,无法编译用到了android库的源文件。可能是还要在哪里加入�依赖吧。

另外一种方法是在stackoverflow中找到的,它也确实能打包成jar包。代码例如以下:

android.libraryVariants.all { variant ->
    def name = variant.buildType.name
    if (name.equals(com.android.builder.BuilderConstants.DEBUG)) {
        return; // skip debug builds
    }
    def task = project.tasks.create "jar${name.capitalize()}, Jar
    task.from variant.javaCompile.destinationDir
    artifacts.add('archives', task)
}

然后运行gradle jarRelease就能够了。

可是它会把我的R.java也编译进去,并且这个文件又非常大。我原来的代码编译之后打包才不到13K,加上编译这个文件的话,要28K。

第三种方法就比較取巧了。这是由于gradle在构建的时候,会对这个模块的class文件先打包成classes.jar并放在build/bundles/release。于是我仅仅须要把它拷出来,并重命名就能够了。

于是代码例如以下:

task releaseJar(type: Copy) {
    from( 'build/bundles/release')
    into( 'build/libs')
    include('classes.jar')
    rename('calsses.jar', 'superlog' + VERSION_NAME + '.jar')
}

task releaseLib(type: Copy, dependsOn: releaseJar) {
    into "../../release"
    from 'libs'
    from 'build/libs'
}

当中VERSION_NAME是我定义的一个变量,在gradle.properties文件里。该文件与gradle.build在同级文件夹。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118282.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 超简单部署使用Maven私库 Nexus

    超简单部署使用Maven私库 Nexusdocker拉取:dockerpulldocker.io/sonatype/nexus3运行容器:dockerrun-d-p8085:8081–namenexusdocker.io/sonatype/nexus,映射到本地的8085端口,等一会儿就好了,用dockerps-a命令查看访问地址:http://192.64.23.111:8085/)…

  • 无线基础知识

    无线基础知识一、WIFI发展历程:二、调制:所谓调制,就是将电信号转换为无线电波的过程,反之则称为解调,其核心技术是调制方式,调制方式越高阶,转换过程中数据密度就越高。调制方式决定每个子载波能传输多少数据,

  • python tkinter窗口美化_jquery进度条插件

    python tkinter窗口美化_jquery进度条插件前言在我们进行自动化测试的时候,用例往往是成百上千,执行的时间是几十分钟或者是小时级别。有时,我们在调试那么多用例的时候,不知道执行到什么程度了,而pytest-sugar插件能很好解决我们的痛点。

  • IIC通信协议详解[转载][通俗易懂]

    IIC通信协议详解[转载][通俗易懂]IIC的基本介绍IIC的简介IIC(Inter-IntegratedCircuit)总线是一种由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。它是半双工通信方式。IIC总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输…

  • java 彻底删除文件_如何删除java文件「建议收藏」

    java 彻底删除文件_如何删除java文件「建议收藏」第一步,在我们的电脑上找到要删除的文件和目录的路径,这里要删除的是test2文件夹下面的所有文件和文件夹,以及自身文件夹,如下图所示:第二步,打开eclipse软件之后,在main方法中通过Filefolder=newFile(“F:/test/test2”);获取文件,然后调用删除文件和目录的方法deleteFolder(folder),如下图所示:第三步,通过folder.listF…

  • php源码 网页聊天_php即时在线网页聊天源码-响应式设计自适应手机端[通俗易懂]

    php源码 网页聊天_php即时在线网页聊天源码-响应式设计自适应手机端[通俗易懂]基于PHPWebSocket即时通讯开发的在线聊天源码,使用高效优雅的Laravel框架进行非通讯部分开发。前台与后台自适应PC与移动端,支持一对多交流,可以自由创建新的房间与解散创建的房间,集成签到功能,等级功能,房间创建者可以对用户进行禁言、拉黑处理,房间可以由房间创建者自由设置进入密码,房间内支持常规的文字消息、表情、支持自定义图片消息、图片可用本地或者图片外链。php环境配置需求P…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号