解决 包含第三方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仓库