使用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在同级文件夹。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【Redis】Redis配置文件详解

    【Redis】Redis配置文件详解一、存放位置linux下一定要养成备份配置文件的习惯。我是将配置文件拷贝至/myredis目录下进行操作的;二、Units单位这个在配置文件开始位置1.配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit;2.对大小写不敏感。三、INCLUDES1.和Struts2配置文件类似,可以通过includes包含,redis.c…

    2022年6月7日
    53
  • Linux常用命令详解「建议收藏」

    Linux常用命令详解「建议收藏」安装和重启查看帮助命令`man命令名#查看命令的详细说明(man是manual的缩写)命令名-help#查看命令的常用选项下载命令wgethttps://www.zabbix.com/download#下载网页源码curlwww.baidu.com安装命令从源代码安装:./configuremakemakeinstall系统属性命令文件命令文件…

    2022年6月25日
    25
  • 基于OpenCv的人脸识别(Python完整代码)

    基于OpenCv的人脸识别(Python完整代码)目前人脸识别有很多较为成熟的方法,这里调用OpenCv库,而OpenCV又提供了三种人脸识别方法,分别是LBPH方法、EigenFishfaces方法、Fisherfaces方法。本文采用的是LBPH(LocalBinaryPatternsHistogram,局部二值模式直方图)方法。opencv是一个开源的的跨平台计算机视觉库,内部实现了图像处理和计算机视觉方面的很多通用算法,对于python而言,在引用opencv库的时候需要写为importcv2。其中,cv2是opencv的C++命名空间名称

    2022年6月7日
    51
  • mac idea 激活码[免费获取]

    (mac idea 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~M…

    2022年3月21日
    98
  • git使用

    git使用

    2021年9月6日
    53
  • 静态内部类和内部类的区别_内部类不能定义为抽象类

    静态内部类和内部类的区别_内部类不能定义为抽象类今天稍微复习一下静态内部类和内部类的相关知识,平常很少用静态内部类静态内部类,不能访问外部类的非静态成员静态内部类不需要创建外部类的对象就可访问(外部类名.内部类比如newMyMain.Person().display();就创建了静态内部类对象)静态内部类可以有public、protected、默认的、private等多种类型(这个功能我倒是从来没听说,通过实验的确ok…

    2022年10月11日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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