使用sbt-assembly将供应商信息添加到MANIFEST.MF

时间:2012-01-25 20:58:57

标签: scala sbt sbt-assembly

我正在使用sbt-assembly来创建一个可运行的jar,但是我的应用程序崩溃是因为jai imageio从MANIFEST.MF文件中加载了供应商名称。如果我从:

手动编辑META-INF / MANIFEST.MF文件
Manifest-Version: 1.0
Main-Class: myMainClass

Implementation-Vendor: foo
Implementation-Title: bar
Implementation-Version: 1.0
Manifest-Version: 1.0
Main-Class: myMainClass

一切正常。

如何配置sbt或sbt-assembly以在jar中包含其他实现信息?或者还有另一种解决方法吗?

(p.s:查询包信息的位置:http://www.java.net/external?url=http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Modules/Java-Advanced-Imaging/com/sun/media/imageioimpl/common/PackageUtil.java.htm

2 个答案:

答案 0 :(得分:8)

我正在使用sbt 0.11.2,并且sbt将清单信息添加到jar而没有任何其他配置:),我不知道你为什么会遇到这个问题。

这是我在本地建造的squryl jar的MANIFEST.MF样本

Manifest-Version: 1.0
Implementation-Vendor: org.squeryl
Implementation-Title: squeryl
Implementation-Version: 0.9.5-rc1
Implementation-Vendor-Id: org.squeryl
Specification-Vendor: org.squeryl
Specification-Title: squeryl
Specification-Version: 0.9.5-rc1
Main-Class: org.squeryl.logging.UsageProfileConsolidator

但可以在build.sbt或Build.scala

中配置

例如

    import sbt._
    import Keys._
    import sbt.Package.ManifestAttributes

    //......

    //......      

    lazy val baseSettings = Defaults.defaultSettings ++ Seq(
    version := ProjectVersion,
    organization := Organization,
    scalaVersion := ScalaVersion,
    packageOptions := Seq(ManifestAttributes(
                      ("Implementation-Vendor", "myCompany"),
                      ("Implementation-Title", "myLib"))))

答案 1 :(得分:0)

问题是sbt程序集不会将默认密钥添加到MANIFEST.MF。另一方面sbt包也这样做,这可能是Jestan Nirojan所使用的。

我在github上为sbt程序集插件项目创建了一个问题。您可能希望添加注释以增加修复的可能性。

See this