kco*_*ock 5 android gradle maven android-gradle-plugin
我正在尝试配置 Android 库项目以将多个工件部署到本地托管的 Maven 存储库。我已经足够了,两个工件都生成了自己的 POM,并且使用以下脚本将其正确部署到存储库:
android {
// Publish both debug and release
publishNonDefault true
}
uploadArchives {
repositories.mavenDeployer {
def majorVersion = 1
def minorVersion = 1
def buildVersion = project.properties.get('RELEASE', '0').toInteger()
addFilter('release') { artifact, file ->
file.name.contains('release')
}
addFilter('debug') { artifact, file ->
file.name.contains('debug')
}
activePomFilters.each { filter ->
pom(filter.name) {
groupId = 'com.redacted'
artifactId = 'redacted'
packaging = 'aar'
version = "${majorVersion}.${minorVersion}.${buildVersion}"
if (!project.hasProperty('RELEASE')) {
version += "-SNAPSHOT"
}
if (filter.name == 'debug') {
artifactId += '-debug'
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
预计交货时间为:
com/
redacted/
redacted/
1.1.0-SNAPSHOT/
redacted-debug/
1.1.0-SNAPSHOT/
Run Code Online (Sandbox Code Playgroud)
这按预期发生,但它似乎发布了带有附加后缀的工件(这破坏了依赖关系发现),并且我无法弄清楚它来自哪里,或者如何更改它。我看到的是:
com/redacted/redacted/1.1.0-SNAPSHOT/
redacted-1.1.0-20150717.213849-1-release.aar
redacted-1.1.0-20150717.213849-1-release.aar.md5
redacted-1.1.0-20150717.213849-1-release.aar.sha1
redacted-1.1.0-20150717.213849-1.pom
redacted-1.1.0-20150717.213849-1.pom.md5
redacted-1.1.0-20150717.213849-1.pom.sha1
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它仅将日期以及 -release 后缀附加到 AAR 相关文件,而不是 POM 文件。如果我手动重命名这些文件,一切都会按预期进行。例如,这是我期望的输出:
com/redacted/redacted/1.1.0-SNAPSHOT/
redacted-1.1.0-20150717.213849-1.aar
redacted-1.1.0-20150717.213849-1.aar.md5
redacted-1.1.0-20150717.213849-1.aar.sha1
redacted-1.1.0-20150717.213849-1.pom
redacted-1.1.0-20150717.213849-1.pom.md5
redacted-1.1.0-20150717.213849-1.pom.sha1
Run Code Online (Sandbox Code Playgroud)
如何更改这些文件的传送方式?
小智 3
你遇到的是这个(强调我的):
重要提示:启用非默认发布时,Maven 发布插件会将这些附加变体发布为额外包(带有 classifier)。这意味着这与发布到 Maven 存储库并不真正兼容。您应该将单个变体发布到存储库或启用项目间依赖项的所有配置发布。
请参阅文档:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-Publication
您看到的后缀release和debug是通过启用非默认工件的发布而引入的分类器。<artifact>中的元素build/ivy.xmlMaven 配置的基础,包含这些分类器。
迭代配置中的工件并删除分类器不起作用。尽管允许设置分类器,但仍保留其原始值。
但真正有效的方法是包装原始文物。包装器将始终返回null分类器。这确实会导致发布和调试工件具有相同的完全限定 ID(= 名称 + 分类器),从而导致仅发布一个工件。可以通过对调试工件使用不同的名称来解决此问题:
class UnclassifiedPublishArtifact implements PublishArtifact {
private PublishArtifact delegatee;
private boolean isDebugArtifact;
UnclassifiedPublishArtifact(PublishArtifact delegatee, isDebugArtifact) {
this.delegatee = delegatee
this.isDebugArtifact = isDebugArtifact
}
@Override
String getName() {
return delegatee.name + (isDebugArtifact ? '-debug' : '')
}
@Override
String getExtension() {
return delegatee.extension
}
@Override
String getType() {
return delegatee.type
}
@Override
String getClassifier() {
return null
}
@Override
File getFile() {
return delegatee.file
}
@Override
Date getDate() {
return delegatee.date
}
@Override
TaskDependency getBuildDependencies() {
return delegatee.buildDependencies
}
}
project.afterEvaluate {
configurations.each { configuration ->
def artifacts = configuration.artifacts
if (!artifacts.isEmpty()) {
def unclassifiedArtifacts = []
unclassifiedArtifacts.addAll(artifacts.collect { classifiedArtifact ->
new UnclassifiedPublishArtifact(classifiedArtifact, classifiedArtifact.classifier == 'debug')
})
artifacts.clear()
artifacts.addAll(unclassifiedArtifacts)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我无法从文档中完全理解项目依赖性的后果,因此您应该检查这些是否仍然有效。
| 归档时间: |
|
| 查看次数: |
2470 次 |
| 最近记录: |