首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala: Sbt可以运行项目,但是在ClassNotFoundError中调用jar结果

Scala: Sbt可以运行项目,但是在ClassNotFoundError中调用jar结果
EN

Stack Overflow用户
提问于 2018-05-21 20:08:08
回答 2查看 843关注 0票数 2

我有一个用SBT编译/包/运行的项目,但是当我使用Scala从命令行调用jar时,我会得到一个'java.lang.ClassNotFoundException‘。

build.sbt:

代码语言:javascript
复制
name := "coloring"

version := "0.1"

scalaVersion := "2.12.5"

libraryDependencies ++= Seq("org.scala-graph" %% "graph-core" % "1.12.5")

运行sbt run会导致:

代码语言:javascript
复制
[info] Compiling 1 Scala source to /path/to/dir/coloring/target/scala-2.12/classes ...
[warn] there was one feature warning; re-run with -feature for details
[warn] one warning found
[info] Done compiling.
[info] Packaging /path/to/dir/coloring/target/scala-2.12/coloring_2.12-0.1.jar ...
[info] Done packaging.
[info] Running Main 
[success] Total time: 6 s, completed May 21, 2018 12:55:19 PM

但是,运行scala target/scala-2.12/coloring_2.12-0.1.jar会导致

代码语言:javascript
复制
java.lang.ClassNotFoundException: scalax.collection.GraphBase$InnerNode

这里有什么问题吗?sbt run怎么可能工作,但是当您直接调用jar时,它就失败了?

编辑:我使用sbt-装配解决了这个问题,但是(1)我不认为这是必要的,(2)在过去的类似项目中,我使用了完全相同的build.sbt和库/imports/etc,当从命令行调用该项目时会工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-21 21:21:32

如果不想组装uber-jar或类似的类,则需要对类路径具有依赖关系。

在命令行中,如下所示:

代码语言:javascript
复制
scala -classpath my_1st.jar:my_2nd.jar:my_3rd.jar <whatever command>

所以在你的例子中,我想这看起来是:

代码语言:javascript
复制
scala -classpath path/to/scala-graph.jar target/scala-2.12/coloring_2.12-0.1.jar

您可以将-classpath缩短为-cp

以下是其他几个选项:在Scala解释器中包括jar文件

票数 1
EN

Stack Overflow用户

发布于 2018-05-21 21:24:04

您使用的库需要在Java类路径中。如果不希望使用程序集将依赖库包含到fat jar中,则需要以其他方式将它们添加到类路径中。例如,通过命令行:

代码语言:javascript
复制
java -cp yourApp.jar:somelib.jar:someotherlibjar your.main.Class
java -cp yourApp.jar:libs/* your.main.Class
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50455929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档