我在这个结构中有一个sbt项目:
.
??? build.sbt
??? project
? ??? build.properties
? ??? plugins.sbt
??? src
??? main
? ??? java
? ??? smcho
? ??? App.java
??? test
??? java
??? smcho
??? AppTest.java
Run Code Online (Sandbox Code Playgroud)
有了sbt package
,我有三个目标目录,target2和target3有相似的结构.
.
??? build.sbt
??? project
? ??? build.properties
? ??? plugins.sbt
? ??? project
? ? ??? target <---------- TARGET 1
? ??? target <---------- TARGET 2
? ??? config-classes
? ??? resolution-cache
? ??? scala-2.10
? ??? streams
??? src
? ??? main
? ? ??? java
? ??? test
? ??? java
??? target <--------------- TARGET 3
??? resolution-cache
? ??? com.example
? ??? reports
??? scala-2.11
? ??? classes
? ??? hello_2.11-0.1.0.jar
??? streams
??? $global
??? compile
Run Code Online (Sandbox Code Playgroud)
为什么这样?有趣的是,sbt clean
不删除目标目录,有没有办法有一个简单的目标,以便我可以轻松删除它们?
这是build.sbt:
lazy val hello = taskKey[Unit]("An example task")
val junit = "junit" % "junit" % "4.11" % "test"
lazy val commonSettings = Seq(
organization := "com.example",
version := "0.1.0",
scalaVersion := "2.11.4"
)
lazy val root = (project in file(".")).
settings(
commonSettings: _*
).
settings(
hello := { println("Hello!") },
name := "hello",
libraryDependencies += junit
)
Run Code Online (Sandbox Code Playgroud)
Dyl*_*lan 15
SBT中的每个项目都有一个target
目录.这就是它编译的类和其他生成的东西.
您root
是一个项目,TARGET 3
在您的图表中是它的目标.
您的构建定义(project
目录)也是一个项目.使用SBT,可以编写scala代码来实现与构建相关的任务和设置.编译代码必须去某个地方.它位于您标记为TARGET 2
- 的目录中project/target
.
SBT中的构建定义可以是递归的,即构建定义可以有自己的构建定义.由于您使用的是插件(在中定义project/plugins.sbt
),因此您的构建定义需要一个构建定义,最终会在您的图表中编译为project/project/target
aka TARGET 1
.
当您clean
在SBT控制台中运行时,它将从当前项目的目标目录中清除文件.我不认为这是删除整个目录,但我可能错了.无论如何,clean
在root
选择项目时运行应仅影响root
项目target
.
在SBT控制台中,您可以运行reload plugins
或reload return
跳转(分别)跳转到当前项目的构建定义.clean
在这种情况下打电话会清理他们各自target
的.
至于将它们组合成一个易于删除的单一目录,我不确定我是否看到了它的价值.现在已经使用SBT几年了,各种target
目录从来没有真正阻碍过.我不认为我甚至想在去年左右一次删除目标目录.
归档时间: |
|
查看次数: |
1736 次 |
最近记录: |