在SBT中声明托管库依赖项很容易,例如
libraryDependencies ++= Seq(
"org.specs2" %% "specs2" % "1.12.2" % "test" ,
"junit" % "junit" % "4.7" % "test"
)
Run Code Online (Sandbox Code Playgroud)
虽然在SBT中声明项目依赖关系并不容易,但我也可以这样做:
object RichMath extends Build {
lazy val myApp = Project("RichMath", file(".")) dependsOn(richUtil)
lazy val richUtil = RootProject(file("../RichUtil"))
}
Run Code Online (Sandbox Code Playgroud)
但实际上,我通常希望在上游项目中立即可见变更的项目模式和库模式之间进行更改,我必须发布更改以在相关项目中查看它们,因为代码会成熟.
在代码库的早期阶段,或者每当我想要跨模块进行频繁更改时,我不希望重新发布的麻烦只是为了看到上游的变化.但是在稳定/成熟的代码中,我想确切地说明我依赖的版本.
似乎SBT将这两个依赖关系视为完全不同.是否有更直接的方式在项目和库依赖项之间切换而不是重写我的构建定义?
在SBT中,只要源文件发生更改,就可以使用"〜"标记触发操作.例如,
sbt> ~test
Run Code Online (Sandbox Code Playgroud)
将在源更改时运行单元测试.
当源更改或本地依赖关系发生更改时,是否有任何好的方法可以触发操作?当同时开发两个项目时,这将非常有用,其中一个项目取决于另一个项目.
我知道你可以通过手动指定文件或基础项目的路径来获得这种行为,但这很脆弱,而且SBT已经知道它在哪里得到它的本地工件,所以这是我想要避免的.
是否存在针对Clojure库进行黑客攻击的典型工作流程?
假设我的应用程序"Foo"依赖于第三方库"Bar",它是从存储库中获取的,并包含在项目Foo via中lein deps.
然后,说我想破解库"Bar",所以我从github克隆它.
现在,我想破解我的本地克隆"Bar",同时处理取决于它的应用程序"Foo".我希望使用swank的一个实例,在"Eoo"中打开所有"Bar"的源文件以及"Foo"中的所有源文件.
是否有捷径可寻?
我想改变我的环境而不是项目.因此,我不想为"Foo"编辑project.clj以实现此目的.
这是否需要在启动之前设置类路径lein swank,还是有更好的方法?