解决 包含第三方aar的module打包 之后无法直接引用第三方类的问题

解决 包含第三方aar的module打包 之后无法直接引用第三方类的问题.
将第三方的aar jar统统放到maven仓库。

打包(插件二选一)

如果使用 maven-publish插件。执行对应模块 publish任务
如果使用 maven 插件。执行对应模块 uploadArchives任务

部分示例代码

//获取配置的仓库地址。
String localRepo() {
    if (hasProperty("LOCAL_REPO")) {
        return LOCAL_REPO
    }
    if (System.getenv("LOCAL_REPO") != null) {
        return new File(System.getenv("LOCAL_REPO")).toURI().toString()
    }
    return new File(rootDir, "repository").toURI().toString()
}
ext.localRepo = localRepo()
//maven-publish用来打包第三方的jar aar
apply plugin: 'maven-publish'
static def getDependencyNode(scope, groupId, artifactId, version) {
    Node node = new Node(null, 'dependency')
    node.appendNode('groupId', groupId)
    node.appendNode('artifactId', artifactId)
    node.appendNode('version', version)
    node.appendNode('scope', scope)
    return node
}
publishing {
    publications {
        chardet(MavenPublication) {
            groupId = 'com.sjianjun.ext'
            artifactId ='chardet'
            version '0.0.1'
            artifact('./libs/chardet.jar')
            pom.withXml {
                def root = asNode()
                def dependencies = root.appendNode('dependencies')
                dependencies.append(getDependencyNode('compile', 'xxx', 'xxxx', "3.0.1"))
            }
        }
    }
    repositories {
        maven {
            url localRepo
        }
    }
}
//输出 将lib中的文件部署到本地的//maven-publish 配置模板。
static String getJarName(File file) {
    def firstDot = file.name.indexOf(".")
    def lastDot = file.name.lastIndexOf(".")
    def index = file.name.substring(0, firstDot).lastIndexOf("-")
    if (index != -1) {
        return file.name.substring(0, index)
    }
    return file.name.substring(0, firstDot)
}

static String getJarVersion(File file) {
    def firstDot = file.name.indexOf(".")
    def lastDot = file.name.lastIndexOf(".")
    def index = file.name.substring(0, firstDot).lastIndexOf("-")
    if (index != -1) {
        return file.name.substring(index + 1, lastDot)
    }
    if (firstDot < lastDot) {
        return file.name.substring(firstDot + 1, lastDot)
    }
    return "0.1"
}

task publishTemplate {

    File[] files = new File(projectDir, "extlib").listFiles()
    for (File file : files) {
        String simpleName = getJarName(file)
        String jarVersion = getJarVersion(file)
        println(simpleName.replace("-","_") + "(MavenPublication) {")
        println("groupId = 'com.sjianjun.ext'")
        println("artifactId ='$simpleName'")
        println("version '$jarVersion'")
        println(" artifact('${file.absolutePath.replace("\\","/")}')")
        println("}")
    }

    for (File file : files) {
        String jarVersion = getJarVersion(file)
        String simpleName = getJarName(file)
        println("api 'com.sjianjun.ext:$simpleName:$jarVersion'")
    }
}



//eg:
//apply plugin: 'maven-publish'
//
//publishing {
//    publications {
//        chardet(MavenPublication) {
//            groupId = 'com.sjianjun.ext'
//            artifactId ='chardet'
//            version '0.0.1'
//            artifact('./libs/chardet.jar')
//        }
//    }
//    repositories {
//        maven {
//            url new File(rootDir, "repository").toURI()
//        }
//    }
//}

//eg:android lib
//apply plugin: 'maven'
//
//task sourceJar(type: Jar) {
//    classifier = 'sources'
//    from android.sourceSets.main.java.srcDirs
//}
//artifacts {
//    archives sourceJar
//}
//
//uploadArchives {
//    repositories.mavenDeployer {
//        // 配置本地仓库路径,项目根目录下的repository目录中
//        repository(url: new File(rootDir, "repository").toURI())
//        pom.groupId = "com.sjianjun"// 唯一标识(通常为模块包名,也可以任意)
//        pom.artifactId = project.name.toLowerCase() // 项目名称(通常为类库模块名称,也可以任意)
//        pom.version = "0.0.1" // 版本号
//    }
//}

//eg:java or kotlin lib
//apply plugin: 'maven'
//
//task sourceJar(type: Jar) {
//    getArchiveClassifier().set('sources')
//    from sourceSets.main.java.srcDirs
//}
//artifacts {
//    archives kotlinSourcesJar
//}
//
//uploadArchives {
//    repositories.mavenDeployer {
//        // 配置本地仓库路径,项目根目录下的repository目录中
//        repository(url: new File(rootDir, "repository").toURI())
//        pom.groupId = "com.sjianjun"// 唯一标识(通常为模块包名,也可以任意)
//        pom.artifactId = project.name.toLowerCase() // 项目名称(通常为类库模块名称,也可以任意)
//        pom.version = "0.0.1" // 版本号
//    }
//}

建议将打包的库放到github方便使用。

  • 示例demo
  • 我的github仓库

你可能感兴趣的:(解决 包含第三方aar的module打包 之后无法直接引用第三方类的问题)