如何使用sbt-eclipse创建项目的Eclipse项目文件?

17

我遵循官方文档来设置我的sbt项目中的插件:

  1. ~/.sbt/plugins/plugins.sbt文件中添加addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.5.0")
  2. cd到一个项目并运行sbt
  3. 在sbt shell中,输入eclipse

这就是我遇到以下错误的地方:

> eclipse
[error] Not a valid command: eclipse (similar: help, alias)
[error] Not a valid project ID: eclipse (similar: sbteclipse)
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: eclipse (similar: deliver, licenses, clean)
[error] eclipse
[error]        ^

我漏掉了什么?

提前感谢您能给我的任何帮助。

$ /opt/sbt-0.13.5/bin/sbt
[warn] The global sbt directory is now versioned and is located at /Users/first.last/.sbt/0.13.
[warn]   You are seeing this warning because there is global configuration in /Users/first.last/.sbt but not in /Users/first.last/.sbt/0.13.
[warn]   The global sbt directory may be changed via the sbt.global.base system property.
[info] Loading project definition from /Users/first.last/git/myproject/project
[info] Set current project to myproject (in build file:/Users/first.last/git/myproject/)
> eclipse
[error] Not a valid command: eclipse (similar: help, alias)
[error] Not a valid project ID: eclipse
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: eclipse (similar: deliver, licenses, clean)
[error] eclipse
[error]        ^

我也遇到了这个错误。后来我发现是因为我在“project”目录中。通过“cd ..”解决了这个问题。facepalm - LexH
8个回答

23
我正在使用 sbt 0.13.5。
$ sbt --version
sbt launcher version 0.13.5

在一个空的目录中执行sbt about以检查构建/ sbt 设置。

$ sbt about
[info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
[info] Updating {file:/Users/jacek/.sbt/0.13/plugins/}global-plugins...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Set current project to sbteclipse (in build file:/Users/jacek/sandbox/sbteclipse/)
[info] This is sbt 0.13.5
[info] The current project is {file:/Users/jacek/sandbox/sbteclipse/}sbteclipse 0.1-SNAPSHOT
[info] The current project is built against Scala 2.10.4
[info] Available Plugins: sbt.plugins.IvyPlugin, sbt.plugins.JvmPlugin, sbt.plugins.CorePlugin, sbt.plugins.JUnitXmlReportPlugin, net.virtualvoid.sbt.graph.Plugin, com.timushev.sbt.updates.UpdatesPlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.4

目录中没有任何文件(请忽略 target 目录,因为它是由 sbt 在启动时自动创建的,可以随时删除)。

$ tree
.
`-- target

1 directory, 0 files

我随后使用sbt运行了sbt shell,以确保不存在eclipse命令。

$ sbt
[info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
[info] Set current project to sbteclipse (in build file:/Users/jacek/sandbox/sbteclipse/)
> eclipse
[error] Not a valid command: eclipse (similar: help, alias)
[error] Not a valid project ID: eclipse (similar: sbteclipse)
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: eclipse (similar: deliver, licenses, clean)
[error] eclipse
[error]        ^

我可以重现您的问题。接下来是设置插件 - 我没有关闭sbt shell。

紧密遵循文档,我打开~/.sbt/0.13/plugins/plugins.sbt并按如下方式进行:

$ cat ~/.sbt/0.13/plugins/plugins.sbt
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.5.0")

我在文件中使用了插件,在sbt shell中使用reload命令来加载更改。

> reload
[info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
[info] Updating {file:/Users/jacek/.sbt/0.13/plugins/}global-plugins...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Set current project to sbteclipse (in build file:/Users/jacek/sandbox/sbteclipse/)
> eclipse
[info] About to create Eclipse project files for your project(s).
[info] Updating {file:/Users/jacek/sandbox/sbteclipse/}sbteclipse...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Successfully created Eclipse project files for project(s):
[info] sbteclipse

你可以看到插件已经成功加载并生成了文件。按照步骤进行操作,你就可以顺利安装插件。


@Jacek Laskowski,我正在尝试理解您在哪个解释器中运行了您的命令。例如,第一个命令 sbteclipse sbt --version - 它是在 shell (bash, cmd 等) 中输入的吗?还是在 sbt 中输入的?如果我在 shell 中输入 sbteclipse,它不在我的路径中(实际上,我认为它在我的文件系统上没有作为可执行文件)。如果我在 sbt 中输入它,我会得到与 eclipse 命令相同的错误 [error] Not a valid command: sbteclipse。我使用的是 Linux = F23,sbt = 0.13,Scala = 2.10.4。而且似乎没有其他答案适用于解决我的问题。 - uvsmtid
抱歉使用了“奇怪”的提示。已修复。 - Jacek Laskowski

5

针对sbt 0.13及以上版本

将sbteclipse添加到您的插件定义文件中。您可以使用以下任一选项:

  1. the global file (for version 0.13 and up) at ~/.sbt/0.13/plugins/plugins.sbt

  2. the project-specific file at PROJECT_DIR/project/plugins.sbt

    addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.5.0")
    

我无法让第二种方法起作用。我不确定原因。[错误] 不是有效的命令:eclipse(类似:help,alias) [错误] 不是有效的项目ID:eclipse [错误] 预期“:”(如果选择配置) [错误] 不是有效的关键字:eclipse(类似:deliver,licenses,clean) [错误] eclipse [错误] ^ - Foo L

4

第2-4行的警告提示您将插件文件夹从~/.sbt/plugins/plugins.sbt移动到~/.sbt/0.13/plugins/plugins.sbt


2
Eclipse没有sbt插件,虽然sbt有一个eclipse插件,这是一种解决方法但不是正式的解决方案。
这意味着eclipse不能像处理pom.xml或build.gradle文件一样理解build.sbt文件。因此,如果我们在build.sbt文件中更改了eclipse项目中的依赖项,eclipse将无法理解它,并且不会更改项目依赖关系中的依赖项。因此,每次修改任何依赖项时,都必须执行以下步骤。
解决方法如下(我使用的是windows):
第1步:从https://www.scala-sbt.org/release/docs/Setup.html下载并安装sbt。对于Windows用户来说,这非常简单,可以使用https://piccolo.link/sbt-1.2.8.msi进行安装。
第2步:创建一个名为D:\sbt\edge的文件夹,现在在此处创建一个build.sbt文件。您可以使用以下内容作为内容,并根据需要进行更改。
name := "edge"
version := "0.1"
scalaVersion := "2.11.8"
val sparkVersion="2.4.0"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion,
"org.apache.spark" %% "spark-sql" % sparkVersion,
"org.apache.spark" %% "spark-mllib" % sparkVersion % "runtime",
"org.apache.spark" %% "spark-streaming" % sparkVersion % "provided",
"org.apache.spark" %% "spark-hive" % sparkVersion % "provided",
"org.apache.spark" %% "spark-catalyst" % sparkVersion % Test,
"org.apache.spark" %% "spark-graphx" % sparkVersion,
"org.apache.spark" %% "spark-repl" % sparkVersion % "provided",
"org.apache.spark" %% "spark-yarn" % sparkVersion,
"org.apache.spark" %% "spark-mllib-local" % sparkVersion,
//"org.apache.spark" %% "spark-streaming-kafka" % "1.6.3",
//"org.apache.spark" %% "spark-streaming-twitter" % "1.6.3",
"ch.qos.logback" % "logback-classic" % "1.1.3"
)

英译中:

现在创建这些嵌套文件夹src和main,例如 -> D:\sbt\spark\src\main

步骤3:打开CMD/PowerShell,进入D:\sbt\edge目录,运行"sbt package"

步骤4:进入您的主目录下的.sbt文件夹,并转到正确版本的插件文件夹,例如我的情况是C:\Users\xxxx.sbt\1.0\plugins。如果您已经有一个plugins.sbt文件,请添加以下行addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4")。如果没有,请创建并添加此行。

步骤5:返回CMD/PowerShell,运行sbt eclipse。它将为eclipse项目创建必要的文件。 步骤6:打开eclipse工作区,并将该项目导入为现有项目。


1

解决方案

只需使用原始文档(在我这里是F23),将sbt更新到最新版本(在我的情况下是sbt-0.13.9-1.noarch)即可。

curl https://bintray.com/sbt/rpm/rpm \
  | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo

sudo yum install --best --allowerasing sbt

然后从项目目录再次尝试(第一次获取依赖项需要约10分钟):

sbt eclipse

原始问题

看起来是 sbt-0.13.1 在 Linux 上的一个问题(至少如此)。

我使用了 Linux F23 上的默认包:

  • scala-2.10.4-8.fc23.noarch
  • java-1.8.0-openjdk-1.8.0.91-6.b14.fc23.x86_64
  • sbt-0.13.1-8.fc23.noarch

没有排列组合能够奏效(~/.sbt/plugins/plugins.sbt~/.sbt/0.13/plugins/plugins.sbtPROJECT_DIR/project/plugins.sbt等)带有配置选项。


0

在Scala Eclipse上创建您的sbt项目需要以下几个步骤:

  1. 创建一个新项目
  2. 在项目中添加文件夹结构
  3. 进入终端,通过cd命令进入您的项目
  4. 输入sbt,然后它开始下载,之后
  5. 进入项目查看是否有项目文件夹
  6. 在该文件夹下创建plugin.sbt并添加sbt(addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.13") addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4")
  7. 然后再次进入终端,输入compile den eclipse
  8. 完成了,它会显示成功消息

0

我正在使用 sbt 0.13.13,并按照以下步骤上传 sbtecipse。 进入您的项目。 在 enter image description here 下。

然后从命令提示符进入项目文件夹并运行 sbt 命令。


-1

我通过将 sbteclipse-plugin 从4.0降级为2.5.0成功解决了同样的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接