<<=
to metoda na TaskKey, która zwraca wartość. Nie aktualizuje stanu zmiennego w dowolnym miejscu, więc w przykładowym kodzie wynik pierwszego połączenia jest odrzucany. Aby to naprawić, zadeklaruj również packageBin jako dane wejściowe, ale zignoruj wynikową wartość. Zauważ, że packageBin zależy od kompilacji, więc w zależności od kompilacji nie jest konieczne.
dist <<= (update, crossTarget, packageBin in Compile) map { (updateReport, out, _) =>
Jest mało prawdopodobne, że chcesz skopiować wszystkie pliki w UpdateReport
do katalogu opartego wyłącznie na nazwę pliku. W różnych zależnościach można mieć tę samą nazwę pliku. Obejmuje to również zależności od wszystkich konfiguracji, w tym zależności testowych.
Dla pierwszego problemu użyj skojarzonego ModuleID
, aby utworzyć ścieżkę w katalogu docelowym, tak jak to zrobiono w katalogu lib_managed
, gdy retrieveManaged := true
. W przypadku drugiego problemu wybierz tylko pliki wymaganej konfiguracji.
updateReport.matching(configurationFilter(Runtime.name)).foreach...
Zobacz sbt.UpdateReport i sbt.RichUpdateReport Dokumentacja API dla innych przydatnych metod.
Jeśli nie chodzi o kolizje nazw plików, można uzyskać pliki zależności z dependencyClasspath. Na przykład:
dist <<= (crossTarget, packageBin in Compile, dependencyClasspath in Runtime) map { (out, _, cp) =>
i uzyskać Seq[File]
z cp.files
.
O ile obejście problemu udało mi się użyć: ~; compile; package; dist task – arturaz