9

我正在使用 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 中包含额外的实现信息?或者还有其他方法可以解决这个问题吗?

(ps:在哪里查找包信息的参考:http ://www.java.net/external?url=http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-模块/Java-Advanced-Imaging/com/sun/media/imageioimpl/common/PackageUtil.java.htm )

4

2 回答 2

11

我正在使用 sbt 0.11.2,并且,sbt 将清单信息添加到 jar 中而无需任何其他配置:),我不确定您为什么会遇到这个问题。

这是我在本地构建的 scuryl 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"))))
于 2012-01-27T19:19:28.727 回答
0

问题是 sbt 程序集没有将默认键添加到 MANIFEST.MF。另一方面,sbt 包这样做,这可能是 Jestan Nirojan 使用的。

我在 github 上为 sbt 程序集插件项目创建了一个问题。您可能想要添加评论以增加修复它的机会。

看到这个

于 2013-04-29T15:18:30.127 回答