gpt4 book ai didi

scala - Intellij sbt 插件与 project/Build.scala 中的项目定义

转载 作者:行者123 更新时间:2023-12-01 03:46:40 31 4
gpt4 key购买 nike

我正在使用以下 sbt Intelli-j 13.1 中的项目结构

.
├── build.sbt
├── project
│   ├── Build.scala
│   ├── plugins.sbt
├── src
│   ├── main
│   └── test
└── target

我的 built.sbt很简单,我只是声明了一些依赖。

我的 project/Build.scala有点复杂,它使用以下方法定义了一个新项目:

懒惰的 val RiepeteKernel = Project( id = "riepete-kernel", base = file("."), settings = defaultSettings )

Intellij 似乎不喜欢它。它在项目设置中设置了两个附加模块,如下所示:

enter image description here

当我尝试编译我的项目时,我收到以下错误:
  Error:scalac: Output path /home/simao/code/riepete/project/target/idea-test-classes is shared between: 
Module 'riepete-build' tests, Module 'riepete-kernel-build' tests Output path /home/simao/code/riepete/project/target/idea-classes
is shared between: Module 'riepete-build' production,
Module 'riepete-kernel-build' production Please configure separate output
paths to proceed with the compilation.
TIP: you can use Project Artifacts to combine compiled classes if needed.

因为我只需要我的额外项目来运行 sbt dist在控制台上,如果我删除了 intellij 创建的两个附加模块,一切正常,但每次重新启动 intellij 时我都需要这样做。

有没有办法让 intellij 不创建这两个附加模块?

谢谢

最佳答案

这取决于您的 sbt 版本但至少在版本 0.13.x您可以使用 project macro像这样:

lazy val riepete = project.in( file(".") )

这样 IntelliJ idea 不会创建额外的模块。

你甚至可以把这是你的 build.sbt .根据我在大多数情况下的经验,您只需维护一个简单的 build.sbt文件,尤其是最新版本的 sbt .无论如何,我想把它放在一个地方是有道理的: build.sbtBuild.scalaproject文件夹。

如果您的项目或子项目文件夹名称包含 -或其他字符,您始终可以使用反引号,例如:
lazy val `riepete-project` = project

在这种情况下,您甚至不需要使用 .in(file(....因为宏将根据模块的名称从正确的文件夹中选择文件。

关于scala - Intellij sbt 插件与 project/Build.scala 中的项目定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26427289/

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