Lavorando su una libreria Android con Gradle (v 1.7) come strumento di costruzione, ho utilizzato il plugin Maven e configurato l'uploadArchives delle attività per pubblicare sia la versione di debug che di rilascio la lib al repository maven locale.
Il seguente codice funziona bene:Gradle e Android: pom configurazione con pubblicazione di più artefatti Maven
// [...]
apply plugin: 'android-library'
// [...] nothing unusual
/*
* Define name of the apk output file (build/apk/<outputFile>)
*/
android.libraryVariants.all
{
variant ->
def outputName = "MyModule-${android.defaultConfig.versionName}-${variant.baseName}.aar"
variant.outputFile = new File("$buildDir/libs", outputName)
}
/*
* Publish to maven local repo (older style maven plugin)
* Used while android plugin is not fixed regarding maven-publish plugin
*
* type command "gradle uploadArchives" to publish the module into the
* local .m2 repository
*/
apply plugin: 'maven'
android.libraryVariants.all
{
variant ->
// add final apk to the 'archives' configuration
project.artifacts
{
archives variant.outputFile
}
}
def localRepoPath = "file://" + new File(
System.getProperty("user.home"), ".m2/repository").absolutePath
uploadArchives
{
repositories.mavenDeployer
{
repository(url: localRepoPath)
addFilter('debug') { artifact, file ->
artifact.name.contains("debug")
}
addFilter('release') { artifact, file ->
artifact.name.contains("release")
}
pom('debug').groupId = 'com.company'
pom('release').groupId = 'com.company'
pom('debug').artifactId = 'id'
pom('release').artifactId = 'id'
pom('debug').version = android.defaultConfig.versionName + "d"
pom('release').version = android.defaultConfig.versionName
pom.packaging = 'aar'
}
}
uploadArchives.dependsOn(assemble)
Tuttavia, quando si cerca di refactoring la configurazione pom:
uploadArchives
{
repositories.mavenDeployer
{
repository(url: localRepoPath)
addFilter('debug') { artifact, file ->
artifact.name.contains("debug")
}
addFilter('release') { artifact, file ->
artifact.name.contains("release")
}
pom.groupId = 'com.company'
pom.artifactId = 'id'
pom('debug').version = android.defaultConfig.versionName + "d"
pom('release').version = android.defaultConfig.versionName
pom.packaging = 'aar'
}
}
artifactId si espande come il nome del file di output, e groupId come il nome della directory root; dando così cattivi percorsi nel repository di musica.
Mi piacerebbe sapere perché è questo, e forse se c'è un modo più pulito per ottenere ciò di cui ho bisogno.
Nel mio progetto ho avuto l'obbligo di rinominare l'output '.aar'. Pertanto, ho impostato 'archivesBaseName' in' build.gradle', che è usato per 'artifactId'. Forse questo aiuta. – JJD
Hai capito? –
@YuchenZhong Sfortunatamente no, poiché questo lavoro faceva parte di uno stage di breve durata. Non so chi è stato a capo del progetto e quindi come è stato gestito da allora. – mklj