modulos - import module android studio
Publica una biblioteca de Android en Maven con aar y código fuente. (5)
Aquí está mi solución mejorada, basada en otras respuestas.
Gist: https://gist.github.com/Robyer/a6578e60127418b380ca133a1291f017
Cambios de otras respuestas:
-
classifier
modificado: debe ser"sources"
( no"source"
) Maneja dependencias
- Soporta también
@aar
ytransitive: false
. En ese caso, establecemos la exclusión en POM para ignorar todas las dependencias transitivas de esta dependencia. También admite reglas de exclusión personalizadas en dependencias, por ejemplo:
compile(''com.example:something:1.0'', { exclude group: ''com.exclude.this'', module: ''some-module'' })
- Soporta también
- No es necesario especificar la ruta del artefacto manualmente.
Registro de cambios:
- 27.3.2018 - Se agregó soporte para las dependencias de api / implementación en el nuevo Gradle
apply plugin: ''maven-publish''
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
android.libraryVariants.all { variant ->
if (variant.name == ''release'') {
owner.classpath += variant.javaCompile.classpath
}
}
exclude ''**/R.html'', ''**/R.*.html'', ''**/index.html''
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = ''javadoc''
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = ''sources''
from android.sourceSets.main.java.srcDirs
}
publishing {
publications {
maven(MavenPublication) {
//groupId ''cz.example''
//artifactId ''custom-artifact''
//version = android.defaultConfig.versionName
artifact bundleRelease
artifact androidJavadocsJar
artifact androidSourcesJar
pom.withXml {
final dependenciesNode = asNode().appendNode(''dependencies'')
ext.addDependency = { Dependency dep, String scope ->
if (dep.group == null || dep.version == null || dep.name == null || dep.name == "unspecified")
return // ignore invalid dependencies
final dependencyNode = dependenciesNode.appendNode(''dependency'')
dependencyNode.appendNode(''groupId'', dep.group)
dependencyNode.appendNode(''artifactId'', dep.name)
dependencyNode.appendNode(''version'', dep.version)
dependencyNode.appendNode(''scope'', scope)
if (!dep.transitive) {
// If this dependency is transitive, we should force exclude all its dependencies them from the POM
final exclusionNode = dependencyNode.appendNode(''exclusions'').appendNode(''exclusion'')
exclusionNode.appendNode(''groupId'', ''*'')
exclusionNode.appendNode(''artifactId'', ''*'')
} else if (!dep.properties.excludeRules.empty) {
// Otherwise add specified exclude rules
final exclusionNode = dependencyNode.appendNode(''exclusions'').appendNode(''exclusion'')
dep.properties.excludeRules.each { ExcludeRule rule ->
exclusionNode.appendNode(''groupId'', rule.group ?: ''*'')
exclusionNode.appendNode(''artifactId'', rule.module ?: ''*'')
}
}
}
// List all "compile" dependencies (for old Gradle)
configurations.compile.getAllDependencies().each { dep -> addDependency(dep, "compile") }
// List all "api" dependencies (for new Gradle) as "compile" dependencies
configurations.api.getAllDependencies().each { dep -> addDependency(dep, "compile") }
// List all "implementation" dependencies (for new Gradle) as "runtime" dependencies
configurations.implementation.getAllDependencies().each { dep -> addDependency(dep, "runtime") }
}
}
}
}
¿Alguien me puede dar una pista sobre cómo usar el complemento gradle de maven-publish para publicar un proyecto / módulo com.android.library con aar y código fuente? Puedo hacer esto con el viejo plugin de maven, pero me gustaría usar el nuevo plugin de maven-publish.
Si desea evitar los códigos de repetición, porque el complemento maven-publish
no escribe dependencias en pom.xml
Prueba este plugin: github.com/wupdigital/android-maven-publish
publishing {
publications {
mavenAar(MavenPublication) {
from components.android
}
}
}
También puede utilizar el complemento de Android Maven . Crea el .aar, javadoc.jar, sources.jar y .pom y actualiza el maven-metadata.xml después de cargar los archivos en el repositorio de Maven. También puse el guión en GitHub .
apply plugin: ''com.android.library''
apply plugin: ''maven''
//Your android configuration
android {
//...
}
//maven repository info
group = ''com.example''
version = ''1.0.0''
ext {
//Specify your maven repository url here
repositoryUrl = ''ftp://your.maven.repository.com/maven2''
//Or you can use ''file:////C://Temp'' or ''maven-temp'' for a local maven repository
}
//Upload android library to maven with javadoc and android sources
configurations {
deployerJars
}
//If you want to deploy to an ftp server
dependencies {
deployerJars "org.apache.maven.wagon:wagon-ftp:2.2"
}
// custom tasks for creating source/javadoc jars
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
destinationDir = file("../javadoc/")
failOnError false
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = ''javadoc''
from javadoc.destinationDir
}
//Creating sources with comments
task androidSourcesJar(type: Jar) {
classifier = ''sources''
from android.sourceSets.main.java.srcDirs
}
//Put the androidSources and javadoc to the artifacts
artifacts {
archives androidSourcesJar
archives javadocJar
}
uploadArchives {
repositories {
mavenDeployer {
configuration = configurations.deployerJars
repository(url: repositoryUrl) {
//if your repository needs authentication
authentication(userName: "username", password: "password")
}
}
}
}
Llamalo con
./gradlew uploadArchives
Un pequeño retoque a dskinners responde con la correcta generación de dependencias:
apply plugin: ''maven-publish''
task sourceJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier "source"
}
publishing {
publications {
bar(MavenPublication) {
groupId ''com.foo''
artifactId ''bar''
version ''0.1''
artifact(sourceJar)
artifact("$buildDir/outputs/aar/bar-release.aar")
pom.withXml {
def dependenciesNode = asNode().appendNode(''dependencies'')
//Iterate over the compile dependencies (we don''t want the test ones), adding a <dependency> node for each
configurations.compile.allDependencies.each {
if(it.group != null && (it.name != null || "unspecified".equals(it.name)) && it.version != null)
{
def dependencyNode = dependenciesNode.appendNode(''dependency'')
dependencyNode.appendNode(''groupId'', it.group)
dependencyNode.appendNode(''artifactId'', it.name)
dependencyNode.appendNode(''version'', it.version)
}
}
}
}
}
repositories {
maven {
url "$buildDir/repo"
}
}
}
Y puedes cambiar la version
y groupId
definiendo:
version = ''1.0.0''
group = ''foo.bar''
Aquí hay una muestra usando el nuevo plugin maven-publish
.
apply plugin: ''maven-publish''
task sourceJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier "sources"
}
publishing {
publications {
bar(MavenPublication) {
groupId ''com.foo''
artifactId ''bar''
version ''0.1''
artifact(sourceJar)
artifact("$buildDir/outputs/aar/bar-release.aar")
}
}
repositories {
maven {
url "$buildDir/repo"
}
}
}
Publique con ./gradlew clean build publish