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, который не создавал артефакты.

Другие вопросы по тегам