Gradle не может опубликовать несколько Maven нативных артефактов
Я не могу заставить Gradle публиковать несколько артефактов в хранилище Maven. Он публикует некоторые, но не все, и я понятия не имею, почему. Цели - отладка и выпуск версий статических библиотек, созданных для OS X и Windows (всего 4 статические библиотеки). Библиотеки OS X хранятся, а библиотеки Windows - нет. Если я изменю закрытие фильтра так, чтобы библиотеки OS X отфильтровывались, ничего не сохранялось.
model {
buildTypes {
debug
release
}
platforms {
"osx-x86_64" {
operatingSystem "osx"
architecture "x86_64"
}
"windows-x86_64" {
operatingSystem "windows"
architecture "x86_64"
}
}
toolChains {
// OS X and Windows toolchains (Clang and Mingw) described here
// - they build the artifacts I wish to store ok
// just removed for clarity
}
} // end of model
libraries {
saveMe {}
}
nativeArtifacts {
libSaveMe {
from (libraries.saveMe) { it instanceof StaticLibraryBinary &&
(it.targetPlatform.name == "osx-x86_64" ||
it.targetPlatform.name == "windows-x86_64")
// if I make this closure on the line above something like:
// it instanceof StaticLibraryBinary && it.targetPlatform.name == "windows-x86_64"
// then nothing is saved in the Maven repo
}
}
}
publishing {
repositories {
maven {
credentials {
username = 'user'
password = 'password'
}
url "http://hostname.com/path/to/repo"
}
}
publications {
mavPub(MavenPublication) {
from nativeArtifacts.libSaveMe
}
}
}
Я использую очень хороший внешний плагин ( Gradle Native Artifacts Plugin, написанный Serge Gebhardt @sgeb (?)), Но прежде чем попытаться разобраться в его коде (я новичок в Gradle), я подумал, что спросите и посмотрите, если что-то очевидно, я делаю не так.
Я попытался поместить операторы logger в закрытие фильтра, и я вижу, что пробуются все возможные комбинации статических / общих библиотек отладки / выпуска, и фильтр правильно определяет true / false, следует ли сохранять библиотеки, но это не так. не сделать это в Maven.
Есть ли строка отладки, которую я мог бы поместить в публикацию {} (или задачу), чтобы узнать, каково фактическое содержимое коллекции nativeArtifacts.libSaveMe?
1 ответ
Итак, мораль этой истории такова: никогда не предполагай, проверяй. В этом случае проверьте, что утверждение:
toolChains {
// OS X and Windows toolchains (Clang and Mingw) described here
// - they build the artifacts I wish to store ok
// just removed for clarity
}
на самом деле правда. Не было
Задача публикации выполнялась сервером CI, и инструментальная цепочка не могла создать артефакты Windows на сервере CI, но она работала на моей локальной машине (из-за ошибки конфигурации при установке цепочки инструментов mingw). Сбой в цепочке инструментов происходил без ошибок (если только он не запускался в --debug) и поэтому был невидим для меня, так как цепочка инструментов заменялась компилятором не из Windows, который не создавал артефакты.