【问题标题】:Run a sbt-created app without sbt在没有 sbt 的情况下运行 sbt 创建的应用程序
【发布时间】:2014-06-29 17:06:32
【问题描述】:

这在某种程度上是this question的后续行动。

当我使用 sbt 创建 Scala 包时,我可以使用以下方式之一运行它:

  • 只需在 sbt 控制台输入run

  • 或通过创建一个 jar 文件(使用 one-jarassembly),并在系统控制台中键入 java -jar myjar.jar 运行此 jar

但我不知道怎么做

  • 从 scala 程序运行我的包? (不是 sbt scala 控制台,在其中输入import mypackage._ 一切正常)

  • 在另一个项目中使用我的 Scala 包?例如通过在另一个项目中导入myjar


编辑:您可以忘记我下面关于sbt-start-script 的问题,因为现在我正在使用sbt-native-packager(我刚刚尝试过它并且它有效,但我之前的问题仍然存在)。


我曾尝试使用sbt-start-script,但没有成功。 target/start 脚本创建得很好,但我收到这样的错误:

$ sh target/start
target/start: 2: target/start: Bad substitution
Exception in thread "main" java.lang.NoClassDefFoundError: Hi
Caused by: java.lang.ClassNotFoundException: Hi
...

这里我只是在src/main/scala 文件夹中有一个main.scala 文件,它是:

object Hi { def main(args: Array[String]) = println("Hi!") }

我在build.sbt 中使用这些设置:

import com.typesafe.sbt.SbtStartScript

seq(SbtStartScript.startScriptForClassesSettings: _*)

【问题讨论】:

  • 只是澄清一下:您想要做的是将您的库用作另一个 SBT 项目中的依赖项?
  • @lpiepiora 我想我现在明白了。对于 scala 控制台,在类路径中添加 jar。对于另一个 SBT 项目,将 jar 添加到 lib 文件夹中。

标签: java scala jar sbt typesafe-stack


【解决方案1】:

您可以通过多种方式在另一个项目中使用您的项目。我不会讨论发布到远程存储库,因为这可能是您无论如何都不想做的事情(至少目前是这样)。

假设您有一个名为 projectA 的项目 - build.sbt 就是这样:

name := "project-a"

organization := "com.acme"

version := "0.1.0"

您还有另一个名为 projectB 的项目,您想在其中使用 projectA 中定义的类。

非托管依赖

最简单的方法之一是将其用作unmanaged dependency。您可以通过放置由packageassembly 或任何其他生成伪像的命令生成的jar 文件来做到这一点。

本地存储库

使用依赖项的另一种方法是将其发布到本地存储库。给定上面定义的 projectA,向 projectBbuild.sbt 添加一个依赖项

libraryDependencies += "com.acme" %% "project-a" % "0.1.0"

现在您可以通过在 projectA 中执行 publishLocalprojectA 发布到本地存储库。这种方法的优点是,如果您的 projectA 声明了任何依赖项,它们将作为传递依赖项添加到 projectB

项目依赖

我想到的最后一种方法是直接声明对 projectA 的依赖。您可以通过在 projectB 中创建一个 build.sbt 文件来做到这一点,它看起来或多或少像这样

lazy val projectA = file("/home/lpiepiora/q-23607291/projectA")

lazy val projectB = project in file(".") dependsOn projectA

现在在 projectA 中声明的类应该在 projectB 中可见。

【讨论】:

  • 很好的解释。由于我已经找到了其他问题的答案(请参阅我在 OP 下方的评论),因此我点击查看您的答案。
猜你喜欢
  • 2011-11-03
  • 2014-07-04
  • 2014-10-09
  • 2017-09-02
  • 2021-06-30
  • 2022-07-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多