如何运行包生成的jar(可能与lib下的其他jar一起运行)?

2024-02-09

我怎样才能跑.jarsbt生成的文件package?

我创建了一个非常简单的例子.scala source:

package org.pack {
    class ScalaParser(files: Array[String]) {
        def doAll() = {
            println("hello")
        }
    }

    object Main {
        def main(args: Array[String]): Unit = {
            val sp = new ScalaParser(args)
            sp.doAll()
        }

    }
}

运行后

$ sbt
> compile
> package

.jar创建于/target/scala-<version>。如果我尝试运行它,它会失败并给出以下错误:

$ java -jar package_2.9.2-0.1.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: scala/ScalaObject
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at org.pack.Main.main(Main.scala)
Caused by: java.lang.ClassNotFoundException: scala.ScalaObject
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 13 more

请注意,没有使用外部库,并且sbt compile run工作正常。

我附上整个项目,包括在 dropbox 上生成的 .jar https://www.dropbox.com/sh/0b663mewxt83c85/AAAsRl1DoThtzEcZlxOCi7Vca/package.zip.

真正奇怪的是.jar清单包含要加载的正确类,即org.pack.Main。也许是其他原因造成的。

系统信息

$ java -version
java version "1.7.0_55"
OpenJDK Runtime Environment (IcedTea 2.4.7) (7u55-2.4.7-1ubuntu1)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)

$ scala -version
Scala code runner version 2.9.2 -- Copyright 2002-2011, LAMP/EPFL

附加问题- 如果我有一些外部的东西怎么办.jars in /lib?我如何确保它们已包装好?我需要一个.jar可在(可能)每个 JVM 上运行。

感谢帮助。


您可以使用sbt plugin sbt组装 https://github.com/sbt/sbt-assembly:

sbt 组件 >= 0.12.0 且 sbt >= 0.13.6

Since sbt组装现在是一个自动插件,添加就足够了项目/程序集.sbt给你的sbt项目:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.5")

sbt 组装 0.11

Add 项目/程序集.sbt给你的sbt项目:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")

Add 汇编.sbt还有:

import AssemblyKeys._ // put this at the top of the file

assemblySettings

Usage

这给了你另一个sbt命令:

sbt assembly

它会生成一个“fat jar”(其中包含所有依赖项,包括 Scala 库)。

现在你可以开始你的程序了

java -cp .../package- assembly.jar

所以你只需要一个Java安装和“fat jar”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何运行包生成的jar(可能与lib下的其他jar一起运行)? 的相关文章

随机推荐

  • 如何创建自定义 UIButton(带图像)但仍使用 setTitle?

    我尝试使用 UIButtonTypeCustom 创建 UIButton 然后使用以下方法调整它的外观 sendButton setImage UIImage imageNamed sendButtonOff png forState UI
  • 批处理文件最大化当前窗口

    我构建了一个批处理程序 目前正在对其进行调整 以使其更具可读性 用户友好性 我想要我的 bat文件自动设置为最大化 bat文件本身 我读到START MAX在线 但这只是打开命令提示符窗口的一个新实例 我不想有两个 bat文件只是为了最大化
  • Typescript:如何设置方法返回值=>子类

    我有一个带有两个子类的父类 abstract class Point public readonly x number public readonly y number constructor x number y number this
  • 多对多关联的 POST 请求

    我有两个具有多对多关联的实体 class User extends BaseUser and class Calendar var integer ORM Column name id type integer ORM Id ORM Gen
  • 从ggplot2中的误差条中删除端点

    我的目标是在 R 中创建箱线图 不一定要使用 ggplot2 但这就是我现在使用的 其风格与我在某处找到的示例相似 减去文本 这是我到目前为止的代码 dat lt read table file https www dropbox com
  • 如何从 HttpSessionListener 访问 JSF 应用程序范围的托管 bean? [复制]

    这个问题在这里已经有答案了 我正在运行一个JSF应用程序并声明了一些应用程序范围的支持 bean 在common beans xml或使用 ManagedBean and ApplicationScoped注释 我如何从内部访问这些bean
  • 扩展 Selenium:如何调用命令?

    我读到用户扩展 http seleniumhq org docs 02 selenium ide html user extensions and 扩展硒 http release seleniumhq org selenium core
  • 切换到特定片段会产生奇怪的 java.lang.NullPointerException

    这是我目前面临的问题 我最近从带有 ADT 插件的 Eclipse 切换到 Android Studio 并且 Android Studio 出现了一个我在 Eclipse 上从未遇到过的错误 当我切换到名为 LineFragment 的特
  • 从特定目录运行 Cronjob

    我创建了一个用于生成 RSS 提要的 php 脚本 该脚本最终将通过 Cronjob 运行 所有 php 文件和生成的 RSS xml 将位于网站的子文件夹中 如果我在本地开发计算机上的同一目录中使用终端或浏览器 则 php 脚本可以在本地
  • 以编程方式确定图像的人类可读颜色(例如红色、绿色等)

    我正在尝试编写一个脚本 该脚本将以编程方式运行图像并告诉我它的原色 目前该脚本获取每个像素的 RGB 值 将它们与预定义的规则进行比较 并尝试计算每种颜色的像素数 我的问题是剧本有点碰运气 有谁知道更好的方法 也许使用更容易翻译成英语的不同
  • 将 IANA/Olson 时区数据库映射到缩写(如 EST、PST 等)

    我需要将 IANA Olson 时区 ID 映射到缩写 例如 EST PST 等 我知道这不是一对一的映射 例如 对于 EST 有相当多的 IANA 时区 我可以使用某种数据库 映射来实现此目的吗 PS JavaScript 解决方案是更好
  • ExtJs 如何滚动到网格底部?

    我正在使用 extjs 制作一个基于网络的日志查看器 我希望将新的日志行添加到我的 gridview 的底部 因为它不需要排序将其移动到网格的顶部 加上我的同事更喜欢它 从而节省了 cpu 我的问题是 理想情况下 添加新行后网格会滚动到底部
  • React Router (Dom) v4 在输入回车键时重定向到不同的路由

    当用户在输入字段中按 Enter 时 我尝试重定向到新路线 我有一个标题和搜索组件 我想在每个页面上呈现它 我发现了使用重定向组件 withRouter 组件 使用上下文以及可能将历史对象传递到我的搜索组件 输入字段所在的位置 的不同用例
  • 替换字符串中的字符

    我正在尝试创建一个字符串 用 替换所有空格 但我不知道具体该怎么做 有人可以帮忙吗 String phrase new String This is a String test 假设它是Java 你可以使用字符串替换 http downlo
  • 如何禁用 MFC 中的最大化按钮?

    如何禁用 SDI 应用程序中的最大化按钮 功能 为了完整性 int CMainFrame OnCreate LPCREATESTRUCT lpCreateStruct ModifyStyle WS MAXIMIZEBOX 0
  • 使用数据库中的配置初始化应用程序组件

    我正在构建一个 Yii2 应用程序 通过swiftmailer 扩展 https github com yiisoft yii2 swiftmailer 我将电子邮件设置 smtp ssl 用户名等 存储在数据库表中 以便能够使用适当的视图
  • 同一服务器上的两个 Laravel 项目导致冲突

    我在同一台服务器上有两个 Laravel 5 1 项目 在单个项目上操作不会给我带来任何麻烦 但是如果我在两个浏览器选项卡上打开两个项目并在它们之间交替 我会收到 服务器遇到内部错误或配置错误 无法完成您的请求 进行了研究 发现服务器正在记
  • ORM 和逻辑删除

    任何可用的 ORM 是否支持使用位字段来表示行删除 更多信息 使用 C 工作 我需要删除这种方式来支持将远程数据库更改同步到中央数据库 我正在寻找一种可能的 ORM 但也对解决该问题的方法感兴趣 因此 如果有人知道任何语言 环境中的任何 O
  • 类型错误:io.connect 不是一个函数

    我正在遵循使用 Node js 和 socket io 的简单多人游戏的教程 http rawkes com articles creating a real time multiplayer game with websockets an
  • 如何运行包生成的jar(可能与lib下的其他jar一起运行)?

    我怎样才能跑 jarsbt生成的文件package 我创建了一个非常简单的例子 scala source package org pack class ScalaParser files Array String def doAll pri