我正在开发一个基于 JLine 的应用程序,我显然想在开发时对其进行测试。
JLine 是一个方便的库,它为 JVM 应用程序提供交互式控制台功能。
JLine 在 Intellij 控制台中不起作用,可能是因为他们已经将 tab 键用于他们自己的邪恶需求,而我要测试的是 tab-completion,因为我正在实现一些 tab-completed 命令。
我掉到 SBT 控制台,然后尝试run-main Example simple
,但我抛出了一个异常,因为类加载器中现在有两个 jline 库 - 我的一个,以及 SBT 使用的一个,因此应用程序在加载 JLine 库时爆炸(单例是邪恶的).. ..
叹息......在 SBT 控制台上转了一圈,发现我可以运行:
> show runtime:managed-classpath
[info] List(Attributed(/home/bryan/.sbt/boot/scala-2.10.0/lib/scala-library.jar), Attributed(/home/bryan/.ivy2/cache/org.parboiled/parboiled-scala_2.10/bundles/parboiled-scala_2.10-1.1.5.jar), Attributed(/home/bryan/.ivy2/cache/org.parboiled/parboiled-core/bundles/parboiled-core-1.1.5.jar), Attributed(/home/bryan/.ivy2/cache/jline/jline/jars/jline-2.10.jar))
我知道我可以解析该列表,显然空格或逗号将是一个完全可行的分隔符,但 Scala 开发人员似乎并没有这样连接......
但是 SBT 似乎只在我在它的控制台中时解析该命令,如果我从实际的 UNIX 控制台执行该命令,如下所示:
% sbt show runtime:managed-classpath
[info] Loading project definition from /common/moon_excel/project
[info] Set current project to moon_excel (in build file:/common/moon_excel/)
[error] Not a valid command: show (similar: shell)
[error] Expected whitespace character
[error] Expected '/'
[error] Expected ':'
[error] Not a valid key: show (similar: show-timing)
[error] show
当我在类路径上有 100 个 jar 时(有点夸张),我正在尝试自动化这个过程,有什么建议吗?