给工程打jar包时如何把libs中的jar包一并打入

1,098 阅读1分钟

这是我参与8月更文挑战的第24天,活动详情查看:8月更文挑战

前言

在我们将工程打包成jar时, 有时候需要将libs目录中的依赖包一并打包进新的jar中, 一般情况下, Gradle不会自动打入, 需要进行相关配置

当我们在进行maven打包时

apply plugin: 'maven'


uploadArchives { // 这里只是更新到本地,可以上传到自定义的maven仓库
    repositories {
        mavenDeployer {
            //提交到远程服务器:
            // repository(url: "http://www.xxx.com/repos") {
            //    authentication(userName: "admin", password: "admin")
            // }
            pom.groupId = 'com.insworks.plugin'
            pom.artifactId = 'framework-plugin'
            pom.version = '1.0.3'
            repository(url: uri("$rootDir/global/repo"))
        }
    }
}

如果工程在本地引用了第三方jar包, 那么直接使用uploadArchives指令是无法将第三方jar包打进去的

解决方案如下:

方案一: 将jar包源代码拷入工程,然后一并打包(不推荐 )

方案二: 只需加入以下代码

task makeJar(type: Jar) {
    //以下是需要打包进jar包中的内容
    from(project.zipTree("libs/dom4j-2.1.1.jar"))
}
//包含第三方jar
artifacts {
    archives makeJar
}

附加

  1. 如果我想打包源码, 那么加入以下代码:
// 源代码一起打包(不需要打包源代码的不要添加这几行)
task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    //指定源码目录
    source = android.sourceSets.main.java.srcDirs
    //加入第三方jar 这个是字节码文件
    from(project.zipTree("libs/dom4j-2.1.1.jar"))
}
artifacts {
    archives androidSourcesJar
}
  1. 如果我想打包文档, 那么加入以下代码:
//生成文档注释
task androidJavadocs(type: Javadoc) {
    //如果出现错误 忽略不计
    failOnError = false
    //指定源码目录
    source = android.sourceSets.main.java.srcDirs
    ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
    classpath += files(ext.androidJar)
}
//将文档打包成jar
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc'
    from androidJavadocs.destinationDir
}
//包含文档
artifacts {
	 archives androidJavadocsJar
}
  1. 如果我想将两个jar包合并成一个jar包, 那么使用以下代码:
task makeJar(type: Jar) {
    //以下是需要打包进jar包中的内容
    from(project.zipTree("libs/dom4j-2.1.1.jar"))
    from(project.zipTree("build/libs/lib_framework_plugin.jar"))
    //合体后的jar包名称
    archiveName = "framework-plugin-1.0.1.jar"
    //输出目录
    destinationDir = file('build/libs')
}

然后执行makeJar指令

image.png

成功后,可以在build目录中找到合并后的jar包

image.png