繁体   English   中英

SBT下载jar时如何显示下载进度?

[英]How to show download progress while SBT is downloading jars?

当我使用SBT打包应用程序时,可能需要很长时间才能从中央Maven存储库或Typesafe存储库中获取jar。 对于我来说,确定下载时是否卡住会很痛苦。 例如,

$ 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通过resolver ant-task的showprogress属性对其进行管理:

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

但是sbt直接使用Ivy API,并且showprogress似乎被硬编码为false。 但是,有一个棘手的方法可以实现您想要的:您可以实现自己的MessageLogger ,而不是实现 (请参见isShowProgress )。 要“注册”它, withIvyIvySbtCachedResolutionResolveEngine类中使用IvySbt重新定义:

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

IvySbt类是最终的, CachedResolutionResolveEngine是私有的,因此您应该使用动态代理来钩接withIvy调用(这非常简单)。 当我在进行依赖关系解决时,至少有类似的解决方案对我有用。 但这当然不是很安全。

还有可能在ivy.xmlivysettings.xml定义此类属性的方法( 如何在外部ivy配置中使用SBT

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM