根据文档here,我一直在开发自定义SBT CLI应用程序。它有效,但是我的问题是测试非常麻烦。
问题在于,您需要在sometool.build.properties
部分的[app]
文件中设置应用程序的版本。我的是这样的:
[app]
org: com.something
name: sometool
version: 0.2-SNAPSHOT
class: com.something.SomeTool
components: xsbti
cross-versioned: binary
然后我运行sbt publishLocal
和sbt @src/main/resources/sometool.build.properties
。这将获取sometool应用程序的打包版本并运行它。问题是,当我更改代码并运行另一个publishLocal时,它将继续获取旧版本。我尝试过sbt clean
,从我的本地常春藤缓存中删除了jar,然后从项目的target
目录中删除了jar,但是仍然得到了旧版本。
我可以通过同时更改build.sbt
和sometool.build.properties
中的版本来解决此问题,但是每次要测试更改时,这样做都是很烦人的。必须有一种更好的方法对此进行测试,但我不知道它是什么。
任何想法或建议都会受到赞赏。
修改
几天后看一下,找出使用哪个文件非常简单。我检查了SBT进程的打开文件描述符,发现将jar下载到<project_root>/project/boot/scala-<version>/<app.org>/<app.name>/<app.version>
。
删除此选项将强制SBT重新获取依赖项,前提是您之前运行过sbt publishLocal
。
但是,sbt clean
和sbt cleanFiles
都没有清理干净,这意味着每次我要运行新版本时,仍然必须手动删除此文件。
编辑2
我在构建中添加了cleanFiles <+= baseDirectory{base => base / "project" / "boot"},
,这意味着我现在至少可以管理SBT中的所有内容。缺点是每次运行sbt clean
都会清除不必要的内容,因此我仍在寻找一种更好的方法来实现此目的。