在project/Build.scala中具有项目定义的Intellij sbt插件
我在Intelli-j 13.1中使用了以下在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
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
)。