2014-09-01 4 views
1

Я не могу заставить Gradle публиковать несколько артефактов в репозитории Maven. Он публикует некоторые, но не все, и я понятия не имею, почему. Целями являются отладка & версии релиза статических библиотек, созданных для OS X и Windows (всего 4 статических библиотеки). Библиотеки OS X хранятся, но Windows - нет. Если я модифицирую закрытие фильтра, так что библиотеки OS X отфильтровываются, ничего не сохраняется.Gradle не может опубликовать несколько местных артефактов maven

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 Гербхарда @sgeb (?)), Но прежде, чем я пытаюсь разобраться в его коде (я новичок в Gradle), я подумал, что я спрошу и посмотрю, есть ли что-то очевидное, что я делаю неправильно.

Я попытался поставить логические заявления в закрытие фильтра, и я вижу, что все возможные комбинации статических/разделяемых библиотек отладки/выпускаются, и фильтр правильно идентифицирует true/false, следует ли сохранять библиотеки , но это не доходит до Maven.

Есть ли строка отладки, которую я мог бы опубликовать {} (или задачу), чтобы узнать, что представляет собой фактическое содержимое коллекции nativeArtifacts.libSaveMe?

ответ

0

ОК, поэтому мораль этой истории: никогда не предполагайте, проверьте. В этом случае убедитесь, что оператор:

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