Как показать прогресс загрузки во время загрузки банок SBT?

1

Когда я использую SBT для упаковки своего приложения, может потребоваться много времени, чтобы получить банки из центрального репозитория maven или репозитория Typesafe. И мне было бы больно идентифицировать, застрял ли он во время загрузки. Например,

$ sbt package
[info] Loading project definition from /home/au9ustine/projects/gloin/project
[info] Set current project to gloin (in build file:/home/au9ustine/projects/gloin/)
...
[info] downloading https://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.10.3/scala-compiler-2.10.3.jar

время от времени.

Я много искал и обнаружил, что он застрял в проблеме подключения. Однако в настоящее время я не знаю, как определить, когда возникает проблема, потому что иногда соединение работает хорошо. Поэтому мне нужно проверить ход загрузки файлов. Что-то вроде wget обеспечивает:

$ wget -c http://www.sonatype.org/downloads/nexus-latest-bundle.zip
--2014-12-27 20:00:28--  http://www.sonatype.org/downloads/nexus-latest-bundle.zip
Resolving www.sonatype.org (www.sonatype.org)... 54.85.199.48, 54.165.51.98
Connecting to www.sonatype.org (www.sonatype.org)|54.85.199.48|:80... connected.
...
HTTP request sent, awaiting response... 200 OK
Length: 80393206 (77M) [application/zip]
Saving to: ‘nexus-latest-bundle.zip

nexus-latest-bundle 100%[=====================>]  76.67M  67.6KB/s   in 17m 6s

2014-12-27 20:17:41 (76.5 KB/s) - ‘nexus-latest-bundle.zip saved [80393206/80393206]

Есть идеи? Благодарю!

Теги:
sbt
ivy

1 ответ

2
Лучший ответ

Apache Ivy отвечает за это, возможно управлять им с помощью Ivy, используя атрибут showprogress решения ant-задачи resolver:

http://ant.apache.org/ivy/history/2.3.0/use/resolve.html

Но sbt использует API Ivy напрямую, и showprogress кажется, жестко закодирован до false. Но есть сложный способ добиться того, чего вы хотите: вместо этого вы можете реализовать свой собственный MessageLogger (см. isShowProgress). Для того, чтобы "зарегистрировать" он, переопределить withIvy из IvySbt и CachedResolutionResolveEngine классов:

def withIvy[T](log: Logger)(f: Ivy => T): T =
       withIvy(new YourLoggerInterface(log))(f)

Класс IvySbt является окончательным, CachedResolutionResolveEngine является закрытым, поэтому вы должны подключаться withIvy вызову withIvy с помощью динамического прокси (это довольно просто). По крайней мере, подобное решение работало для меня, когда я играл с решением зависимости. Но это, конечно, не очень безопасно.

Существует также способ определения такого свойства в ivy.xml, ivysettings.xml (как использовать SBT с внешней конфигурацией плюща)

  • 0
    Спасибо dk14, хотя еще не тестировал, но оценил вашу идею :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню