在project/Build.scala中具有项目定义的Intellij sbt插件

在project/Build.scala中具有项目定义的Intellij sbt插件,scala,intellij-idea,sbt,Scala,Intellij Idea,Sbt,我在Intelli-j 13.1中使用了以下sbt项目结构 . ├── build.sbt ├── project │   ├── Build.scala │   ├── plugins.sbt ├── src │   ├── main │   └── test └── target 我的builded.sbt非常简单,我只声明了一些依赖项 我的project/Build.scala有点复杂,它定义了一个新项目,使用: lazy val riepeteernel=Project(id=“rie

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

.
├── build.sbt
├── project
│   ├── Build.scala
│   ├── plugins.sbt
├── src
│   ├── main
│   └── test
└── target
我的
builded.sbt
非常简单,我只声明了一些依赖项

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

lazy val riepeteernel=Project(id=“riepete kernel”,base=file(“.”),settings=defaultSettings)

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

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

当我试图编译我的项目时,我得到以下错误:

  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不创建这两个附加模块


谢谢

一种可能性是不使用IntellJ的SBT导入功能,而是使用插件生成文件。注意,您需要在SBT项目更改(依赖项添加/删除等)上重新运行它


另一种方法是在导入SBT项目时关闭自动导入选项,然后删除IDEA项目结构对话框中的额外模块。

这取决于您的
SBT
版本,但至少在版本
0.13.x
中,您可以这样使用:

lazy val riepete = project.in( file(".") )
这样IntelliJ idea就不会创建额外的模块

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

如果项目或子项目文件夹名称包含
-
或其他字符,则始终可以使用反勾号,例如:

lazy val `riepete-project` = project

在这种情况下,您甚至不需要在(文件)中使用
(..
宏将根据模块名称从正确的文件夹中拾取文件。

您知道如果使用该宏创建项目,是否可以向项目中添加一些
设置
?如果项目定义为这样,intellij为什么不拾取项目?当然感谢。这是可能的。您可以调用
设置
>方法并添加您的设置:
lazy val riepete=project.in(文件(“.”).settings(..).settings()
,或者您可以使用普通方式。普通方式是指为您添加设置键
build.sbt
,例如:
libraryDependencies+=..
。所有这些设置都将被选中。尝试从
sbt
选项卡刷新项目(您可以在IntelliJ IDEA的右侧栏中找到它)。如果不工作,您可以再次导入项目。删除
.idea
文件夹并重新导入将是最后一个解决方案。谢谢。看起来IntelliJ scala插件采用了您分配给项目的val的实际名称,并为其创建了一个模块。如果您将其称为“根”就像sbt中的文档所说,但是将项目称为其他项目,那么它将创建冲突的模块。如果我使用
sbt idea
,我需要禁用intellij中的某些内容吗?我以前没有使用sbt idea,因为它看起来有点过时,但可能我错了。我会尝试一下。谢谢你不,如果你是指插头,你不需要禁用任何东西在中,但如回答中所述,您需要禁用自动导入选项。通过
idea gen
生成idea模块文件后,只需从IntelliJ idea打开项目(不要
import
,而是
open
)。