gpt4 book ai didi

scala - sbt项目构建中的多个目标目录

转载 作者:行者123 更新时间:2023-12-04 13:22:37 33 4
gpt4 key购买 nike

我在这个结构中有一个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/targetTARGET 1

在SBT控制台中运行clean时,它将清除当前项目的目标目录中的文件。我认为这并不是要删除整个目录,但在那儿我可能是错的。无论如何,在选择了clean项目的情况下运行root只会影响root项目的target

在SBT控制台中,您可以运行reload pluginsreload return分别跳入和跳出当前项目的构建定义。在该上下文中调用clean将清除它们各自的target

至于将它们组合到一个易于删除的目录中,我不确定是否看到了其中的值。已经使用SBT数年了,各种各样的target dirs从未真正成为障碍。我认为我甚至不想在过去一年左右的时间内一次删除目标目录。

关于scala - sbt项目构建中的多个目标目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33902998/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com