Пакет sbt для создания автономной банки в sbt 0.11.2

Как я могу создать отдельную банку в sbt 0.11.2?

Сейчас я пытаюсь sbt package, и когда я пытаюсь запустить java -jar app.jar в выпущенном файле jar, это дает следующее исключение:

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

Отметьте sbt-onejar - плагин для создания единого исполняемого JAR, содержащего весь ваш код и зависимости, как вложенные JAR.

Ответ 3

например. https://github.com/ymasory/sbt-prototype, который использует Proguard, чтобы сделать исполняемый файл баночка:

~/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$