热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用gradle打包jar包

STOPMAINTENANCE!(2017-05-25)最近用androidstudio来做android开发的IDE,它是使用gradle来构建的,于是开始学习gradle.现在有一个项目

STOP MAINTENANCE!(2017-05-25)


最近用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('classes.jar', 'superlog' + VERSION_NAME + '.jar')}task releaseLib(type: Copy, dependsOn: releaseJar) {    into "../../release"    from 'libs'    from 'build/libs'}

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


推荐阅读
author-avatar
伊丽汇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有