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


146

我刚开始开发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项目。欢乐时光
用户

Answers:


170

共有三种创建项目的基本方法-IntelliJ的现代版本可以直接导入sbt项目,否则,您可以使用sbt插件生成IntelliJ项目,也可以使用IntelliJ Scala插件创建sbt项目。使用这两种解决方案都可以立即使用基本功能,某些复杂的版本可能会出现问题,因此请尝试使用其他工具查看是否可以正常使用。

IntelliJ

如今,IntelliJ IDEA变得越来越好。当前版本(14.0.2)通过Scala插件支持sbt项目。只需安装插件,您就可以轻松打开Scala / sbt项目。

首选项中的插件下的Scala插件

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

导入SBT项目

IntelliJ Scala插件

IntelliJ插件可在http://confluence.jetbrains.com/display/SCA/Scala+Plugin+for+IntelliJ+IDEA上找到, 也可以使用“设置”->“插件”对话框直接在IDE中安装。之后,只需执行File-> New Project-> Scala-> SBT。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.sbtORPROJECT_DIR/project/plugins.sbt

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

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

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

默认情况下,如果找到sbt和库依赖项的分类器(即源和javadocs),并将引用添加到IDEA项目文件中。如果您不想下载/引用它们,请使用command 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-ideasbt任务创建IDEA项目文件。

默认情况下,如果找到sbt和库依赖项的分类器(即源和javadocs),并将引用添加到IDEA项目文件中。如果您不想下载/引用它们,请使用command 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)
   // ...
}

4
我完全转换为这个插件。将其与idea-sbt-plugin结合使用,可以将项目构建委托给SBT,并从IDEA中的工具窗口以交互方式使用SBT。sbt-idea的版本0.2.0-SNAPSHOT解决了一些小麻烦-创建父项目,并保留了手动IntelliJ配置。
retronym 2010年

谢谢您的插件。真的是妖精!
ksemeks

4
我收回我的答案。这是一个很棒的插件,我现在每次都使用它。
Synesso,2010年

1
我为SBT 0.10.0添加了一个答案,这与SBT 0.7.x + stackoverflow.com
questions/4250318/…

感谢opyate,我已根据您的评论更新了帖子
Steve Gury 2011年

11

现在,我手动执行此操作。这很简单。

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

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

请注意:以上方法不适用于新派sbt(即0.10及更高版本),因为默认情况下它不会将依赖项复制到lib_managed中。你可以加

retrieveManaged := true

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


但是,您是从IntelliJ还是从终端启动项目(码头)?我无法从IDE设置项目启动器/编译器。
ksemeks 2010年

还有一件事:我做了您所写的所有内容,但是IntelliJ对导入的“ import net.liftweb.LiftRules”说“无法解析符号ne”
ksemeks 2010年

我设法解决了进口问题。我必须导入/ lib_managed / compile而不是/ lib_managed
ksemeks 2010年

6
答案已撤消!使用sbt-idea插件。
Synesso,2010年

7

如今Tempus fugit和IntelliJ IDEA变得越来越好。毕竟是2015年,不是吗?

话虽如此,最新版本的IntelliJ IDEA 14.0.2 通过Scala插件开箱即用地支持sbt项目。只需安装插件,您就可以轻松打开Scala / sbt项目。

首选项中的插件下的Scala插件

在撰写本文时,我正在使用该插件的Early Access版本,即1.2.67.6.EAP。

有了该插件,您只需指向一个sbt项目,IDEA将为您提供一个向导来打开这种项目。

导入SBT项目

关于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项目文件。

阅读sbt-idea插件网站以获取更多最新信息。您可能还会发现我的博客条目“ 将基于sbt的项目导入IntelliJ IDEA 13(带有sbt-idea,Scala 2.11和sbt 0.12)”很有用。


创建新项目时。在sbt gen-idea之后,该项目为空。没有结构,不是src,没有测试文件夹。而且很
la脚。– ses

您是如何创建项目的?什么是目录结构和内部文件?
Jacek Laskowski

它只是空的。我不得不手工将其命名为“ main / scala / src”。但是我可以忍受。
ses

您可能想使用github.com/n8han/giter8作为引导sbt项目的一种方法。SBT可以有一个空目录作为主项目和主/斯卡拉/ src目录是不是需要-只需将您的斯卡拉文件在主目录为SBT来接他们。
Jacek Laskowski

5

对于SBT 0.7

请参阅本页其他位置的答案

对于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对邮件组的建议

在IntelliJ IDEA 13.x本身中

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


2

我只是经历了所有这些痛苦。我花了几天时间试图建立一个可以接受的环境,并得出结论,一段时间内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,withot maven做同样的事情。
ksemeks 2010年

我可以为IntelliJ设置项目以使用它,但无法使用sbt编译器/启动器。
ksemeks 2010年

就ENSIME而言:工作容易吗?我尝试过一次,但是我从未使用过emacs,所以这对我来说有点困难。emacs是前提?
ksemeks 2010年

以下链接将带您完成SBT设置。这对我有用,但是再次以非集成方式使用SBT和IntelliJ就像使用两个单独的工具一样,带有SBT的ENSIME更自然。heikoseeberger.blogspot.com/2010/08/...
andyczerwonka

2

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

SBT版本是0.13.5(终端: sbt sbtVersion

转到项目的根文件夹,然后在终端中输入

sbt idea

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

然后在IntelliJ中,选择“文件”>“打开”>选择项目。它应该打开项目没有任何问题。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.