2014-10-07 2 views
2

У меня есть файл build.sbt, который включает плагин сборки. До самой последней сборки атрибут Main-Class включался в собранную банку, но внезапно это уже не так.Почему в генерируемом манифеста нет атрибута Main-Class?

При попытке запустить банку, я получаю неповторимое:

no main manifest attribute, in ./target/scala-2.10/foo-0.3.0-SNAPSHOT.jar 

но используя бег с консоли SBT, работает нормально.

В настоящее время этот файл build.sbt выглядит следующим образом (mainClass в сборке, добавленном в попытке заставить указать плагин сборки, который он действительно должен включить, хотя я заметил в исходном коде плагина, похоже, что он проверяет один указанный для запуска в любом случае).

import AssemblyKeys._ 

name := "foo" 

version := "0.3.0-SNAPSHOT" 

organization := "com.mycompany.myproduct" 

scalaVersion := "2.10.4" 

mainClass in (Compile, run) := Some("ProcessRelogger") 

mainClass in assembly := Some("ProcessRelogger") 

assemblySettings 

libraryDependencies ++= Seq(
    "org.scalatest" % "scalatest_2.10" % "1.9.2" % "test", 
    "ch.qos.logback" % "logback-classic" % "1.0.9", 
    "com.typesafe.akka" %% "akka-actor" % "2.2.4", 
    "joda-time" % "joda-time" % "2.3", 
    "com.rabbitmq" % "amqp-client" % "3.3.4", 
    "org.scalaz" % "scalaz-core_2.10" % "7.0.6", 
    "com.typesafe.slick" %% "slick" % "2.0.2", 
    "postgresql" % "postgresql" % "9.1-901.jdbc4", 
    "com.escalatesoft.subcut" %% "subcut" % "2.0" 
) 

и когда я разархивировать файл банку и проверить META-INF/MANIFEST.MF, нет Main-Class: атрибут включен.

+0

Глупый вопрос - Есть ли многопроцессорная сеть в Processrelogger? – Azzie

+0

Мое первое предположение заключалось в том, чтобы попробовать FQDN вместо имени класса. – lgasior

+0

Что такое версия sbt-assembly? –

ответ

1

Это попытка воспроизвести проблему с использованием последней версии sbt-assembly 0.11.2.

проекта/build.properties

sbt.version=0.13.7-M3 

проект/assembly.sbt

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

build.sbt

import AssemblyKeys._ 

assemblySettings 

scalaVersion := "2.11.2" 

SRC/главная/Скала/Main.scala

object HelloApp extends App { 
    println("Hello") 
} 

Со всеми файлами выше в одном проекте:

> about 
[info] Updating {file:/Users/jacek/sandbox/sbt-assembly/}sbt-assembly... 
[info] Resolving jline#jline;2.12 ... 
[info] Done updating. 
[info] This is sbt 0.13.7-M3 
[info] The current project is {file:/Users/jacek/sandbox/sbt-assembly/}sbt-assembly 0.1-SNAPSHOT 
[info] The current project is built against Scala 2.11.2 
[info] Available Plugins: sbt.plugins.IvyPlugin, sbt.plugins.JvmPlugin, sbt.plugins.CorePlugin, sbt.plugins.JUnitXmlReportPlugin, com.typesafe.sbteclipse.plugin.EclipsePlugin, net.virtualvoid.sbt.graph.Plugin, com.github.tototoshi.sbt.musical.Plugin, com.timushev.sbt.updates.UpdatesPlugin, sbtassembly.Plugin 
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.4 

> assembly 
[info] Updating {file:/Users/jacek/sandbox/sbt-assembly/}sbt-assembly... 
[info] Resolving jline#jline;2.12 ... 
[info] Done updating. 
[info] Compiling 1 Scala source to /Users/jacek/sandbox/sbt-assembly/target/scala-2.11/classes... 
[info] Including: scala-library-2.11.2.jar 
[info] Checking every *.class/*.jar file's SHA-1. 
[info] Merging files... 
[warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard' 
[warn] Strategy 'discard' was applied to a file 
[info] SHA-1: a5c09d7626fe19f4e3cd98d709966a77f127b048 
[info] Packaging /Users/jacek/sandbox/sbt-assembly/target/scala-2.11/sbt-assembly-assembly-0.1-SNAPSHOT.jar ... 
[info] Done packaging. 
[success] Total time: 4 s, completed Oct 8, 2014 9:27:41 AM 

> eval "unzip -p target/scala-2.11/sbt-assembly-assembly-0.1-SNAPSHOT.jar META-INF/MANIFEST.MF" ! 
Manifest-Version: 1.0 
Implementation-Title: sbt-assembly 
Implementation-Version: 0.1-SNAPSHOT 
Specification-Vendor: default 
Specification-Title: sbt-assembly 
Implementation-Vendor-Id: default 
Specification-Version: 0.1-SNAPSHOT 
Main-Class: HelloApp 
Implementation-Vendor: default 

[info] ans: Int = 0 
+0

Действительно - это работало нормально, а затем оно перестало работать нормально, и я похоже, не может понять, что изменилось, что может иметь такой эффект. – PlexQ

0

Это не отвечает "почему" за оригинальный вопрос, но, как упоминалось в других комментариях, это может произойти, если вы представили еще один main (например, включая косвенно через другой объект).

Таким образом, вы можете явно определить его, например, в вашем build.sbt:

mainClass in assembly := Some("path.to.intended.Main") // object with main 
+0

Не знаете, как это отличается от того, что указано в build.sbt выше? – PlexQ

0

Постарайся закомментировать MainClass в (компилировать, запускать): = Некоторые из них ("ProcessRelogger") ]$ sbt clean assembly ]$ java -jar target/xxx.jar

Смежные вопросы