【发布时间】:2014-12-02 04:51:30
【问题描述】:
我有一个包含程序集插件的 build.sbt 文件。直到最近的构建,Main-Class 属性都包含在组装的 far jar 中,但突然之间,情况不再如此。
当我尝试运行 jar 时,我得到了无与伦比的:
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"
)
当我解压 jar 文件并检查 META-INF/MANIFEST.MF 时,没有包含 Main-Class: 属性。
【问题讨论】:
-
愚蠢的问题 - Processrelogger 中是否有多个主电源?
-
我的第一个猜测是尝试 FQDN 而不仅仅是类名。
-
sbt-assembly 的版本是多少?
-
使用0.11.2的sbt-assembly,ProcessRelogger中没有多个main,是FQDN,在根包里。
-
你能删除两个
mainClass行并重新开始吗?之后你可以做show compile:run::mainClass并将其包含在问题中吗?你也可以用主类的名字执行assembly然后last-grep吗?将输出添加到问题中。
标签: scala sbt sbt-assembly