尝试打开jar时发生意外错误

时间:2014-07-22 20:32:29

标签: java eclipse spring jar classpath

我有一个Spring批处理项目导出为可运行的Jar文件,它有4个主要方法,只有一个main工作,另一个主要需要引用jar jai-codec-1.1.3.jar,但是当我把jar放在类路径中,第一个main也无法正常工作,它会显示错误消息“尝试打开jar时发生意外错误”

这是我的主要文件:

  

Manifest-Version:1.0 Class-Path:JARS / spring-jdbc-3.1.1.RELEASE.jar   JARS / spring-context-3.2.3.RELEASE.jar JARS / log4j-1.2.14.jar   JARS / spring-tx-3.2.3.RELEASE.jar JARS / spring-core-3.2.3.RELEASE.jar   JARS / spring-beans-3.2.3.RELEASE.jar JARS / commons-logging-1.1.1.jar   JARS / spring-aop-3.2.3.RELEASE.jar JARS / aopalliance-1.0.jar   JARS / spring-expression-3.2.3.RELEASE.jar JARS / commons-dbcp-1.4.jar   JARS / commons-pool-1.5.4.jar JARS / ojdbc6-11.2.0.3.jar   JARS / commons-lang3-3.0.jar JARS / itextpdf-5.5.1.jar   JARS / jdom2-2.0.5.jar JARS / jai-codec-1.1.3.jar

我发现它不是因为特定的jar文件,这是因为类路径的长度超出了限制,有没有办法在MAINFEST文件类路径中放入更多的jar?

我也定义了所有@autowired服务和组件类,但它仍然无法在jar中工作,只有在spring-config中将它们定义为bean时才有效。

任何人都可以帮我弄明白为什么?

3 个答案:

答案 0 :(得分:0)

问题解决了。我不确定它是否是MAINFEST文件中类路径大小的限制,但它确实很重要,当它太长时,我将所有jar名称更改为1,2,3 ......并且能够将所有jar放入类路径中,它的工作原理。如果您对此有不同意见,请留下您的意见,谢谢。

答案 1 :(得分:0)

此错误可能(以非常不清楚的方式)指示MANIFEST.MF中的错误。这可以通过文件中间的无效空行或太长的行来模拟。

MANIFEST.MF极难手动编辑:

  • 它必须有最后一行空行(或换句话说,最后一行终止符),
  • 它的行最多不能超过72个字符(我敢打赌,这是您的真正问题,只是解决了症状)
  • 并且续行必须以空格开头...
  • 并且最重要的是,类路径条目必须是URL,而不是文件路径。

有关其规格的更多信息,请参见:https://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html

答案 2 :(得分:0)

我要补充一点,清单中的属性一定不能用点分隔,破折号或没有分隔符:“ myProperty”将起作用,“ my-property”也将起作用,但是“ my.property”将失败并显示“错误:尝试打开文件时发生意外错误...”,完全没有任何解释。 尽管“ my.property”在某些独立应用程序中可以用作Java属性,但是在读取清单后,它只是中断了JAR中嵌入式应用程序的启动。