Когда я использую 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]
Есть идеи? Благодарю!
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 с внешней конфигурацией плюща)