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

标签 java scala sbt ivy

当我使用 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 ,而不是 this (参见isShowProgress)。要“注册”它,请重新定义 withIvy来自 IvySbtCachedResolutionResolveEngine类(class):

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

IvySbt 类是最终类,CachedResolutionResolveEngine 是私有(private)的,因此您应该使用 dynamic proxy Hook withIvy 调用(这非常简单)。当我玩依赖解析时,至少类似的解决方案对我有用。但这当然不太安全。

还有一种方法可以在 ivy.xml 中定义此类属性,ivysettings.xml ( How to use SBT with external ivy configuration )

关于java - SBT下载jar包时如何显示下载进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27667382/

相关文章:

java - 如何在 Eclipse 中设置 SplashScreen?

scala - 检查 "isDefined"并一起映射到 "get"

scala - 我们能否使用多个 Spark session 来访问两个不同的 Hive 服务器

sbt - 为什么以及如何设置 sbt 和 Ivy 的主目录和缓存目录?

json - java.lang.ClassNotFoundException : net.logstash.logback.encoder.LogstashEncoder

java - 具有自定义布局的 AlertDialog 未显示

java - 小程序输出错误。为什么这个字符串变量没有按照我想要的方式执行?

java - 比较 Java 列表

scala - 从 List[Int] 到 List[Double] 的隐式转换失败

scala - 如何从 sbt 命令行为 scalatest 设置系统属性