我在这个结构中有一个sbt项目:
.
├── build.sbt
├── project
│ ├── build.properties
│ └── plugins.sbt
└── src
├── main
│ └── java
│ └── smcho
│ └── App.java
└── test
└── java
└── smcho
└── AppTest.java
使用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
为什么这样?有趣的是,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
)
SBT中的每个项目都有一个target
目录。那就是它的编译类和其他生成的东西的地方。
您root
是一个项目,而TARGET 3
图中是它的目标。
您的构建定义(project
目录)也是一个项目。使用SBT,可以编写scala代码以实现与构建相关的任务和设置。编译后的代码必须放在某个地方。它进入您标记为TARGET 2
-的目录中project/target
。
SBT中的构建定义可以是递归的,即您的构建定义可以具有自己的构建定义。由于您使用的是插件(在中定义project/plugins.sbt
),因此您的构建定义需要一个构建定义,该定义最终将被编译为图表中的project/project/target
别名TARGET 1
。
clean
在SBT控制台中运行时,它将清除当前项目的目标目录中的文件。我不认为要删除整个目录,但是在那儿我可能是错的。无论如何,clean
在root
选择项目时运行只会影响root
项目的target
。
在SBT控制台中,您可以运行reload plugins
或reload return
分别跳入和跳出当前项目的构建定义。clean
在该上下文中调用将清除各自target
的。
至于将它们组合到一个易于删除的目录中,我不确定是否看到了其中的值。使用SBT已有数年了,各种各样的target
目录从未真正成为障碍。我认为我甚至不想在过去一年左右的时间内一次删除目标目录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句