Java 在没有sbt的情况下运行sbt创建的应用程序
这不知何故是一个后续行动 当我使用sbt创建Scala包时,我可以使用以下方法之一运行它: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控制台中键入
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下面的评论),我点击寻找你的答案。