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

Posted

技术标签:

【中文标题】如何使用 sbt-eclipse 创建项目的 Eclipse 项目文件?【英文标题】:How to use sbt-eclipse to create Eclipse project files of a project? 【发布时间】:2014-09-01 11:41:08 【问题描述】:

我跟随the official documentation在我的sbt项目中设置插件:

    addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.5.0") 添加到~/.sbt/plugins/plugins.sbt 文件 cded 到一个项目并运行 sbt 在 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 解决 【参考方案1】:

我正在使用 sbt 0.13.5。

$ sbt --version
sbt launcher version 0.13.5

empty 目录中执行 sbt about 以检查 build/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 中输入的吗(bashcmd , 等等。)?还是输入sbt?如果我在 shell 中键入sbteclipse,它不在我的路径中(事实上,我认为它在我的文件系统上的任何地方都不是可执行文件)。如果我在sbt 中键入它,我会得到与eclipse 命令相同的错误[error] Not a valid command: sbteclipse。我在 Linux = F23,sbt = 0.13,Scala = 2.10.4。似乎没有其他答案适用于解决我的问题。 我很抱歉使用“奇怪”的提示。固定。【参考方案2】:

对于 sbt 0.13 及更高版本

将 sbteclipse 添加到您的插件定义文件中。您可以使用:

    位于 ~/.sbt/0.13/plugins/plugins.sbt

    的全局文件(适用于 0.13 及更高版本)

    PROJECT_DIR/project/plugins.sbt中的项目特定文件

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

【讨论】:

我无法让方法 #2 起作用。我不确定为什么。 [错误]不是一个有效的命令:eclipse(类似:帮助,别名)[错误]不是一个有效的项目ID:eclipse [错误]预期的':'(如果选择配置)[错误]不是一个有效的键:eclipse(类似:交付,许可证,清理)[错误] eclipse [错误] ^【参考方案3】:

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

【讨论】:

【参考方案4】:

Eclipse 没有 sbt 插件,虽然 sbt 有 eclipse 插件

这是一种解决方法,但不是正确的解决方案。

这意味着 eclipse 不像它对 pom.xml 或 build.gradle 那样理解 build.sbt 所以如果我们在 Eclipse 项目的 build.sbt 文件中改变了一个依赖,eclipse 将无法理解它,也不会改变项目依赖中的依赖。所以每次你修改任何依赖时都必须执行以下步骤。

解决方法如下(我用的是windows

第一步: 从https://www.scala-sbt.org/release/docs/Setup.html下载并安装sbt 对于 Windows,它非常简单 https://piccolo.link/sbt-1.2.8.msi 非常简单

第二步: 创建一个文件夹,比如 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 like -> D:\sbt\spark\src\main

第三步: 打开 CMD/PowerShell 进入 D:\sbt\edge 运行“sbt 包”

第 4 步: 进入主目录中的 .sbt 和正确版本的 plugins 文件夹,在我的情况下为 C:\Users\xxxx.sbt\1.0\plugins 如果您已经有 plugins.sbt 文件,请添加以下行 addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4") 如果没有,请创建并添加该行。

Step5: 回到 CMD/PowerShell ,运行 sbt eclipse。它将为 eclipse 项目创建必要的文件。 第六步: 打开一个eclipse工作区,将该项目作为现有项目导入。

【讨论】:

【参考方案5】:

解决方案

使用original documentation(在我的情况下为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

原来的问题

这似乎是(至少)Linux 上的(至少)sbt-0.13.1 的问题。

我在 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

并且 no 排列(~/.sbt/plugins/plugins.sbt~/.sbt/0.13/plugins/plugins.sbtPROJECT_DIR/project/plugins.sbt,...)与配置选项有效。

【讨论】:

【参考方案6】:

我正在使用 sbt 0.13.13,并使用以下步骤上传 sbtecipse。 转到您的项目。 在下

然后从命令提示符和 sbt

转到项目文件夹

【讨论】:

【参考方案7】:

要在 scala eclipse 上创建你的 sbt 项目,你需要做一些事情:

    创建一个新项目 在项目中添加文件夹结构 进入终端,通过cd命令进入你的项目, 输入sbt,然后开始下载,然后 去项目看看,有没有做项目文件夹 在该文件夹下创建 plugin.sbt 并添加 sbt (addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.13") addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4") 然后再次进入终端输入 compile den eclipse 完成,显示成功消息

【讨论】:

【参考方案8】:

我能够通过将 sbteclipse-plugin 从 4.0 降级到 2.5.0 来消除同样的错误

【讨论】:

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

无法安装 sbt-eclipse 插件

如果我只想要***文件夹中的所有内容,有啥方法可以不混淆 sbt-eclipse? (2.2.0 和 0.12.4)

如何在 Amazon EC2 上部署 Eclipse Java Web 动态项目?

在ec2实例上部署Java maven项目

如何在终止时使用现有 EC2 实例映像创建新的 EC2 实例?

如何将 eclipse 服务器添加到现有的 EC2 实例 [关闭]