sbt package to create a standalone jar in sbt 0.11.2

醉酒当歌 提交于 2019-12-24 15:27:45

问题


How can I produce a standalone jar in sbt 0.11.2?

Right now I'm trying sbt package and when I try to run java -jar app.jar on the produced jar file, it gives the following exception:

Exception in thread "main" java.lang.NoClassDefFoundError: scala/App
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at Test.main(Test.scala)
Caused by: java.lang.ClassNotFoundException: scala.App
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

回答1:


Check sbt-onejar - a plugin for building a single executable JAR containing all your code and dependencies as nested JARs.




回答2:


I was able to achieve this using https://github.com/sbt/sbt-assembly

Just follow the instructions in https://github.com/sbt/sbt-assembly/blob/master/README.md, and run sbt assembly.




回答3:


E.g. https://github.com/ymasory/sbt-prototype that uses Proguard to make an executable jar:

~/src$ git clone https://github.com/ymasory/sbt-prototype.git test
Cloning into 'test'...
[...]
~/src$ cd test/
~/src/test$ sbt sbt-version
[info] Loading project definition from /home/user/src/test/project
[info] Set current project to myproj (in build file:/home/user/src/test/)
[info] 0.11.2
~/src/test$ sbt compile proguard
[info] Loading project definition from /home/user/src/test/project
[info] Updating {file:/home/user/src/test/project/}default-d8cff0...
[info] Resolving com.github.siasia#xsbt-proguard-plugin_2.9.1;0.11.2-0.1.1 ...
[info] Resolving net.sf.proguard#proguard-base;4.6 ...
[...]
[info] Compiling 1 Scala source to /home/user/src/test/target/scala-2.9.2/classes...
[success] Total time: 7 s, completed May 11, 2012 8:08:15 PM
[info] Packaging /home/user/src/test/target/scala-2.9.2/myproj_2.9.2-1.0.0-SNAPSHOT.jar ...
[info] Done packaging.
ProGuard, version 4.6
[...]
[success] Total time: 44 s, completed May 11, 2012 8:09:00 PM
~/src/test$ java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.1) (6b24-1.11.1-4ubuntu2)
OpenJDK Client VM (build 20.0-b12, mixed mode, sharing)
~/src/test$ java -jar target/scala-2.9.2/myproj_2.9.2-1.0.0-SNAPSHOT.min.jar 
hello myproj
~/src/test$ 


来源:https://stackoverflow.com/questions/8470439/sbt-package-to-create-a-standalone-jar-in-sbt-0-11-2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!