gpt4 book ai didi

java - 在没有 sbt 的情况下运行 sbt 创建的应用程序

转载 作者:行者123 更新时间:2023-11-29 03:21:05 25 4
gpt4 key购买 nike

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

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

  • 只需在 sbt 控制台中输入 run

  • 或通过创建一个 jar 文件(使用 one-jarassembly),然后通过键入 在系统控制台中运行此 jar java -jar myjar.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: _*)

最佳答案

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

假设您有一个名为 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 中可见。

关于java - 在没有 sbt 的情况下运行 sbt 创建的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23607291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com