如何使用 IntelliJ Idea 创建 SBT 项目?

Posted

技术标签:

【中文标题】如何使用 IntelliJ Idea 创建 SBT 项目?【英文标题】:How to create SBT project with IntelliJ Idea? 【发布时间】:2011-05-14 02:43:50 【问题描述】:

我刚开始使用 Scala/LiftWeb/Sbt 开发,我想在 IntelliJ Idea 中导入一个 Sbt 项目。 实际上,我设法通过两种不同的方式导入我的项目:

1) 使用 Maven。我创建了一个 Maven 项目,最重要的是我创建了一个 Sbt 项目,然后我将其导入 IntelliJ。然后我可以轻松地启动、停止码头服务器并做其他事情。 但这不是我想要的。我想做同样的事情,只是没有 Maven。 这导致我

2) 使用 Eclipse。因此,我创建了一个新的 Sbt 项目(使用我编写的一个小脚本,将 Sbt 项目配置为一个 WebProject)。然后我使用 sbt-eclipsify 插件来“转换”Eclipse 的项目,然后我将其导入 IntelliJ(现有源 -> eclipse)。 但是问题从这里开始:我无法让 IntelliJ Sbt 插件工作。

谁能帮我解决这个问题?

【问题讨论】:

对于需要快速解答或紧急需求的人,只需去 github 并找到一个简单的 scala 项目。下载然后在您的 IDE 中导入。您应该能够访问 scala 项目。快乐时光 【参考方案1】:

创建项目有三种基本方法——现代版本的 IntelliJ 可以直接导入 sbt 项目,否则您可以使用 sbt 插件生成 IntelliJ 项目,或使用 IntelliJ Scala 插件创建 sbt 项目。使用这两种解决方案,基本功能开箱即用,一些复杂的构建可能会出现问题,因此请尝试其他工具,看看它是否可以在那里工作。

IntelliJ

如今,IntelliJ IDEA 变得更好了。当前版本 (14.0.2) 通过 Scala 插件支持开箱即用的 sbt 项目。只需安装插件,您应该可以毫无问题地打开 Scala/sbt 项目。

使用该插件,只需指向一个 sbt 项目,IDEA 就会为您提供打开该项目的向导。

IntelliJ Scala 插件

IntelliJ 插件可以在这里找到 http://confluence.jetbrains.com/display/SCA/Scala+Plugin+for+IntelliJ+IDEA 或者可以使用设置 -> 插件对话框直接从 IDE 中安装。之后可以只做 File -> New Project -> Scala -> SBT based。 IntelliJ 将生成基本的 build.sbt,下载必要的依赖项并打开项目。

SBT 插件

可以在这里找到基于 sbt 文件生成想法项目的 Sbt 插件:https://github.com/mpeltonen/sbt-idea

SBT 12.0+ & 13.0+

只需将addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.5.2") 添加到您的build.sbt;不需要额外的解析器。

旧版本:

SBT 0.11+

创建以下行并将其添加到~/.sbt/plugins/build.sbt OR PROJECT_DIR/project/plugins.sbt

resolvers += "sbt-idea-repo" at "http://mpeltonen.github.com/maven/"

addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")

在 sbt 中使用 gen-idea 创建 IDEA 项目文件。

默认情况下,如果找到 sbt 和库依赖项的分类器(即源代码和 javadocs),并且将引用添加到 IDEA 项目文件中,则会加载它们。如果您不想下载/引用它们,请使用命令gen-idea no-classifiers no-sbt-classifiers


SBT 0.10.1 (根据插件作者的说法,0.10.0 不会工作!)

创建以下行并将其添加到 ~/.sbt/plugins/build.sbt:

resolvers += "sbt-idea-repo" at "http://mpeltonen.github.com/maven/"

libraryDependencies += "com.github.mpeltonen" %% "sbt-idea" % "0.10.0"

使用gen-idea sbt 任务创建IDEA项目文件。

默认情况下,如果找到 sbt 和库依赖项的分类器(即源代码和 javadocs),并且将引用添加到 IDEA 项目文件中,则会加载它们。如果您不想下载/引用它们,请使用命令gen-idea no-classifiers no-sbt-classifiers


SBT 0.7

要使用它,只需从你的 sbt shell 运行它,它会使用插件作为外部程序:

 > *sbtIdeaRepo at http://mpeltonen.github.com/maven/
 > *idea is com.github.mpeltonen sbt-idea-processor 0.4.0
 ...
 > update
 ...
 > idea
 ...

您还可以根据需要在项目定义中添加特征:

import sbt._
class MyProject(info: ProjectInfo) extends ParentProject(info) with IdeaProject 
  lazy val mySubProject = project("my-subproject", "my-subproject", new DefaultProject(_) with IdeaProject)
   // ...

【讨论】:

我是这个插件的忠实拥护者。将它与 idea-sbt-plugin 结合使用,它可以让您将项目构建委托给 SBT,并从 IDEA 中的工具窗口以交互方式使用 SBT。 sbt-idea 0.2.0-SNAPSHOT 版本修复了一些小问题——创建父项目,并保留手动 IntelliJ 配置。 我收回我的回答。这是一个很棒的插件,我现在每次都使用它。 我添加了一个针对 SBT 0.10.0 的答案,它与 SBT 0.7.x+ ***.com/questions/4250318/…987654323@ 完全不同 我只需要将它添加到project/plubins.sbt addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.1.0") 看到这个 - pkmishra.github.com/productivity/2013/01/16/…【参考方案2】:

现在我是手动完成的。这很简单。

    使用 SBT 创建项目 使用相同的根路径创建一个新的 IDEA 项目 创建具有相同根路径的模块 将 src/main/scala 设置为模块上的 src 路径 在模块上设置 src/test/scala 为测试路径 将 scala-library.jar 添加为库 将 lib(如果存在)添加为模块库中的 jar 目录 将 lib_managed/compile(如果存在)添加为模块库中的 jar 目录 将 lib_managed/test(如果存在)添加为模块库中的 jar 目录

这就是记忆。如果它是自动化的会更好,但像现在这样没什么大不了的。

注意一点:上述方法不适用于 new-school sbt,即 0.10 及更高版本,因为它默认不会将依赖项复制到 lib_managed 中。你可以添加

retrieveManaged := true

到您的 build.sbt 以使其将依赖项复制到 lib_managed 中。

【讨论】:

但是,您是从 IntelliJ 还是从终端开始您的项目(码头)?我无法从 IDE 设置项目启动器/编译器。 还有一件事:我做了你写的所有事情,但 IntelliJ 对导入“import net.liftweb.LiftRules”说“无法解析符号 ne” 我设法绕过了导入。我必须导入 /lib_managed/compile 而不是 /lib_managed 回答撤回!使用 sbt-idea 插件。【参考方案3】:

Tempus fugit 和 IntelliJ IDEA 这些天变得更好了。毕竟是 2015 年,不是吗?

话虽如此,the latest version of IntelliJ IDEA 14.0.2 使用the Scala plugin 支持开箱即用的 sbt 项目。只需安装插件,您应该可以轻松打开 Scala/sbt 项目。

截至撰写本文时,我正在使用该插件的早期访问版本,即 1.2.67.6.EAP。

使用插件只需指向一个 sbt 项目,IDEA 就会为您提供一个向导来打开此类项目。

关于 sbt 0.12.4 中的 sbt-idea

对于 sbt 0.12.4,系统范围的插件配置文件 - ~/.sbt/plugins/build.sbtPROJECT_DIR/project/plugins.sbt - 应该有以下几行:

resolvers += "Sonatype snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/"

addSbtPlugin(dependency="com.github.mpeltonen" % "sbt-idea" % "1.5.0-SNAPSHOT")

运行sbt gen-idea生成IDEA项目文件。

阅读the sbt-idea plugin website 了解更多最新信息。您可能还会发现我的博客条目Importing sbt-based project to IntelliJ IDEA 13 (with sbt-idea, Scala 2.11 and sbt 0.12) 很有用。

【讨论】:

创建新项目时。在 sbt gen-idea 之后项目是空的。没有结构,不是 src,测试文件夹。而且很蹩脚.. 你是如何创建这个项目的?目录结构和里面的文件是什么? 它只是空的。我不得不用手将它装箱“main / scala / src”。但我可以忍受。 您可能希望使用github.com/n8han/giter8 作为引导 sbt 项目的一种方式。 sbt 可以有一个空目录作为主项目,并且 不需要 需要 main/scala/src - 只需将 Scala 文件放在主目录中,以便 sbt 选择它们。【参考方案4】:

对于 sbt 0.7

见the answer elsewhere on this page。

对于 sbt 0.10

克隆并构建 Ismael 的 sbt-idea:

git clone https://github.com/ijuma/sbt-idea.git
cd sbt-idea
git checkout sbt-0.10
./sbt package

如果您还没有 sbt 插件库目录,请创建一个

mkdir -p  ~/.sbt/plugins/lib

将第一步构建的jar复制到这里

cp sbt-idea/target/scala-2.8.1.final/*.jar ~/.sbt/plugins/lib

重新启动或重新加载 sbt,然后你可以运行 gen-idea(或者 gen-idea with-classifiers,如果你也想要 intelliJ 中的源代码和 javadoc)

来源:Tackers' suggestion on the message group。

在 IntelliJ IDEA 13.x 本身中

您现在可以在 IDEA 中打开一个基于 SBT 的项目。它将创建必要的项目和模块,并在您对构建脚本进行更改时使您的依赖项保持最新。

【讨论】:

【参考方案5】:

我刚刚经历了所有这些痛苦。我花了几天时间尝试建立一个可接受的环境,并得出结论 ENSIME、SBT 和 JRebel 将成为我的开发环境一段时间。是的,它要回到 Emacs,但是 ENSIME 通过重构、调试支持、导航等将它变成了一个想法。它远不及 Eclipse (Java),但除非 scala 插件工作得更好,否则它是我们有最好的。

在 Scala 开发环境达到标准(Eclipse 或 IntelliJ)之前,我不会打扰。它们实在是太麻烦了。

查看电梯站点上的讨论。

http://groups.google.com/group/liftweb/browse_thread/thread/6e38ae7396575052#

在该线程中,有一个指向 IntelliJ 的 HOWTO 的链接,但虽然它有点工作,但有许多问题使它不太有用。

http://blog.morroni.com/2010/07/14/setup-intellij-9-for-lift-framework-development/comment-page-1/

【讨论】:

我已经读过了。本文使用 maven,我设法开始工作。我现在正在尝试做同样的事情,只是使用 sbt,没有 maven。 我可以设置项目供 IntelliJ 使用,但无法使用 sbt 编译器/启动器。 就 ENSIME 而言:工作容易吗?我尝试过一次,但我从未使用过 emacs,所以对我来说有点困难。使用 emacs 是前提吗? 以下链接将引导您完成 SBT 设置。这对我有用,但再次以非集成方式使用 SBT 和 IntelliJ 真的就像使用两个单独的工具,其中 ENSIME 与 SBT 更自然。 heikoseeberger.blogspot.com/2010/08/…【参考方案6】:

2014 年的答案是旧的。 在 IntelliJ 13.x 中,插件 Scala 版本为 0.41.2(包括 SBT)。

我的SBT版本是0.13.5(终端:sbt sbtVersion

进入项目根目录,在终端输入

sbt idea

您将看到两个新的隐藏文件夹 .idea.idea_modules

然后在 IntelliJ 中,文件 > 打开 > 选择项目。 它应该可以毫无问题地打开项目。

【讨论】:

【参考方案7】:

在开始创建 SBT 项目之前,请确保已在 IntelliJ IDEA 中下载并启用了 Scala 插件。

下面的链接解释了你需要知道的一切。

https://www.jetbrains.com/help/idea/2016.1/getting-started-with-sbt.html

【讨论】:

以上是关于如何使用 IntelliJ Idea 创建 SBT 项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Intellij Idea 中使用自定义 sbt 版本?

手把手用 IntelliJ IDEA 和 SBT 创建 scala 项目

更改后如何强制 IntelliJ IDEA 从 build.sbt 重新加载依赖项?

如何在 sbt 项目中使用来自不同位置的 scala 源并使其与 IntelliJ IDEA 一起使用?

如何将 SBT 类附加到 Intellij Idea?

Sbt 无法解析 Intellij IDEA 上的 Scalatest