如何使用 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.sbt
或 PROJECT_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 重新加载依赖项?