加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 19:10:47 所属栏目:安全 来源:网络整理
导读:我在这个结构中有一个sbt项目: .├── build.sbt├── project│?? ├── build.properties│?? └── plugins.sbt└── src ├── main │?? └── java │?? └── smcho │?? └── App.java └── test └── java └── smcho └── AppT
我在这个结构中有一个sbt项目:

.
├── build.sbt
├── project
│?? ├── build.properties
│?? └── plugins.sbt
└── src
    ├── main
    │?? └── java
    │??     └── smcho
    │??         └── App.java
    └── test
        └── java
            └── smcho
                └── AppTest.java

使用sbt包,我有三个目标目录,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 3是其目标.

您的构建定义(项目目录)也是一个项目.使用SBT,可以编写scala代码来实现与构建相关的任务和设置.编译代码必须去某个地方.它位于您标记为TARGET 2的目录中 – 项目/目标.

SBT中的构建定义可以是递归的,即您的构建定义可以有自己的构建定义.由于您使用的是插件(在project / plugins.sbt中定义),因此您的构建定义需要一个构建定义,最终会在图中编译为项目/项目/目标,即TARGET 1.

在SBT控制台中运行clean时,它将清除当前项目目标目录中的文件.我不认为这是删除整个目录,但我可能错了.在任何情况下,在选择根项目时运行clean应该只影响根项目的目标.

在SBT控制台中,您可以运行重载插件或重新加载返回以分别跳入和跳出(当前)当前项目的构建定义.在该背景下调用清洁将清除其各自的目标.

至于将它们组合成一个易于删除的单一目录,我不确定我是否看到了它的价值.现在已经使用SBT几年了,各种目标的目标从来没有真正阻碍过.我不认为我甚至想在去年左右一次删除目标目录.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读