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

Java 在没有sbt的情况下运行sbt创建的应用程序,java,scala,jar,sbt,typesafe-stack,Java,Scala,Jar,Sbt,Typesafe Stack,这不知何故是一个后续行动 当我使用sbt创建Scala包时,我可以使用以下方法之一运行它: 只需在sbt控制台中键入run 或者创建一个jar文件(使用one-jar或assembly),然后在系统控制台中键入java-jar-myjar.jar 但我不知道该怎么做 从scala程序运行我的包?(不是sbt scala控制台,在该控制台中,通过键入import mypackage,一切都可以正常工作。) 在另一个项目中使用我的Scala包?例如,在另一个项目中导入myjar 编辑:您可

这不知何故是一个后续行动

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

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

  • 或者创建一个jar文件(使用
    one-jar
    assembly
    ),然后在系统控制台中键入
    java-jar-myjar.jar

但我不知道该怎么做

  • 从scala程序运行我的包?(不是sbt scala控制台,在该控制台中,通过键入
    import mypackage,一切都可以正常工作。

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


编辑:您可以忘记我下面关于
sbt开始脚本
的问题,因为我现在正在使用(我刚刚尝试过,它可以工作,但我以前的问题仍然没有解决)


我试过使用,但没有成功。
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中定义的类

非托管依赖项 最简单的方法之一是将其用作。您可以通过放置由
package
生成的
jar
文件、
assembly
或任何其他生成人工制品的命令来实现这一点

本地库 使用依赖关系的另一种方法是将其发布到本地存储库。给定上面定义的projectA,在projectB的
build.sbt
中添加依赖项

libraryDependencies += "com.acme" %% "project-a" % "0.1.0"
现在,您可以通过在projectA中执行
publishLocal
将projectA发布到本地存储库。这种方法的优点是,如果您的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中可见。

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

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

name := "project-a"

organization := "com.acme"

version := "0.1.0"
还有另一个名为projectB的项目,您希望在其中使用projectA中定义的类

非托管依赖项 最简单的方法之一是将其用作。您可以通过放置由
package
生成的
jar
文件、
assembly
或任何其他生成人工制品的命令来实现这一点

本地库 使用依赖关系的另一种方法是将其发布到本地存储库。给定上面定义的projectA,在projectB的
build.sbt
中添加依赖项

libraryDependencies += "com.acme" %% "project-a" % "0.1.0"
现在,您可以通过在projectA中执行
publishLocal
将projectA发布到本地存储库。这种方法的优点是,如果您的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中可见。

只是为了澄清:您想做的是在另一个SBT项目中将您的库用作依赖项?@lpiepiora我想我现在明白了。对于scala控制台,在类路径中添加jar。对于另一个SBT项目,将jar添加到lib文件夹中。只是澄清一下:您要做的是在另一个SBT项目中将您的库用作依赖项?@lpiepiora我想我现在明白了。对于scala控制台,在类路径中添加jar。对于另一个SBT项目,在lib文件夹中添加jar。很好的解释。因为我已经找到了我其他问题的答案(见我在OP下面的评论),我点击这里寻找你的答案。很好的解释。因为我已经找到了我其他问题的答案(见我在OP下面的评论),我点击寻找你的答案。