正在为 Android 库项目中的 AAR 工件指定部署的文件名
Specifying deployed filename for AAR artifact in Android library project
我正在尝试配置一个 Android 库项目以将多个工件部署到本地托管的 Maven 存储库。我已经走得够远了,两个工件都有自己的 POM 生成,并且它被正确部署到 repo,使用以下脚本:
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'
}
}
}
}
}
预计交货时间:
com/
redacted/
redacted/
1.1.0-SNAPSHOT/
redacted-debug/
1.1.0-SNAPSHOT/
正如预期的那样发生,但它似乎发布了带有附加后缀的工件(这破坏了依赖项发现),我无法弄清楚它来自哪里,也不知道如何更改它。我看到的是:
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
出于某种原因,它仅将日期和 -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
如何更改这些文件的传送方式?
你 运行 是这样的(强调我的):
Important: When enabling publishing of non default, the Maven publishing plugin will publish these additional variants as extra packages (with classifier). This means that this is not really compatible with publishing to a maven repository. You should either publish a single variant to a repository OR enable all config publishing for inter-project dependencies.
查看文档:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-Publication
您看到的后缀 release
和 debug
是通过启用非默认工件的发布而引入的分类器。 build/ivy.xml
中用作 Maven 配置基础的 <artifact>
元素包含这些分类器。
迭代配置中的工件并删除分类器不起作用。虽然允许设置分类器,但保留其原始值。
但有效的方法是包装原始工件。对于分类器,包装器将始终 return 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)
}
}
}
我无法从文档中完全理解项目依赖项的后果,因此您应该检查这些是否仍然有效。
我正在尝试配置一个 Android 库项目以将多个工件部署到本地托管的 Maven 存储库。我已经走得够远了,两个工件都有自己的 POM 生成,并且它被正确部署到 repo,使用以下脚本:
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'
}
}
}
}
}
预计交货时间:
com/
redacted/
redacted/
1.1.0-SNAPSHOT/
redacted-debug/
1.1.0-SNAPSHOT/
正如预期的那样发生,但它似乎发布了带有附加后缀的工件(这破坏了依赖项发现),我无法弄清楚它来自哪里,也不知道如何更改它。我看到的是:
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
出于某种原因,它仅将日期和 -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
如何更改这些文件的传送方式?
你 运行 是这样的(强调我的):
Important: When enabling publishing of non default, the Maven publishing plugin will publish these additional variants as extra packages (with classifier). This means that this is not really compatible with publishing to a maven repository. You should either publish a single variant to a repository OR enable all config publishing for inter-project dependencies.
查看文档:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-Publication
您看到的后缀 release
和 debug
是通过启用非默认工件的发布而引入的分类器。 build/ivy.xml
中用作 Maven 配置基础的 <artifact>
元素包含这些分类器。
迭代配置中的工件并删除分类器不起作用。虽然允许设置分类器,但保留其原始值。
但有效的方法是包装原始工件。对于分类器,包装器将始终 return 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)
}
}
}
我无法从文档中完全理解项目依赖项的后果,因此您应该检查这些是否仍然有效。