用onejar-maven-plugin创建签名jar,抛出stackoverflow异常

时间:2013-01-31 10:11:48

标签: stack-overflow jarsigner onejar

我有一个使用onejar-maven-plugin创建的jar,用于侦听来自tibco的jms消息并进行相应的处理。它工作正常但是当我使用jarsigner签署此jar并尝试运行它时,它会抛出以下异常:

org.apache.commons.logging.LogConfigurationException: java.lang.StackOverflowError (Caused by java.lang.StackOverflowError)
    at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:538)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
    at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:160)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.<init>(AbstractRefreshableApplicationContext.java:89)
    at org.springframework.context.support.AbstractRefreshableConfigApplicationContext.<init>(AbstractRefreshableConfigApplicationContext.java:59)

    at org.springframework.context.support.AbstractXmlApplicationContext.<init>(AbstractXmlApplicationContext.java:61)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:136)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.adobe.jobcloud.envoy.client.PushToPrereleaseWorker.main(PushToPrereleaseWorker.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.simontuffs.onejar.Boot.run(Boot.java:340)
    at com.simontuffs.onejar.Boot.main(Boot.java:166)
Caused by: java.lang.StackOverflowError
    at com.simontuffs.onejar.OneJarFile.getJarEntry(OneJarFile.java:43)
    at java.util.jar.JarFile.getManEntry(Unknown Source)
    at java.util.jar.JarFile.getManifestFromReference(Unknown Source)
    at java.util.jar.JarFile.getManifest(Unknown Source)
    at java.util.jar.JarFile.maybeInstantiateVerifier(Unknown Source)
    at java.util.jar.JarFile.getInputStream(Unknown Source)
    at com.simontuffs.onejar.OneJarFile.getJarEntry(OneJarFile.java:50)
    at java.util.jar.JarFile.getManEntry(Unknown Source)
    at java.util.jar.JarFile.getManifestFromReference(Unknown Source)
    at java.util.jar.JarFile.getManifest(Unknown Source)
    at java.util.jar.JarFile.maybeInstantiateVerifier(Unknown Source)
    at java.util.jar.JarFile.getInputStream(Unknown Source)
    at com.simontuffs.onejar.OneJarFile.getJarEntry(OneJarFile.java:50)
    at java.util.jar.JarFile.getManEntry(Unknown Source)
    at java.util.jar.JarFile.getManifestFromReference(Unknown Source)
    at java.util.jar.JarFile.getManifest(Unknown Source)

此外,如果我使用maven-jarsigner-plugin对其进行签名,结果完全相同。我很笨,并且坚持这个问题。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您是否尝试过增加-Xss JVM选项?首先是4096k,然后降低直到它再次失败。 使用密码通常可能需要超过默认堆栈大小。 对于maven jarsigner插件,您可以在linux主目录中编辑.mavenrc文件并添加以下行:

#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/java-6-sun-i586 #(or another)
export M2_HOME=/usr/local/lib/apache-maven/apache-maven-3.0.4
export MAVEN_OPTS="-Xss4096k -XX:MaxPermSize=128m -Xmx384m"

我不知道如何在Windows下执行此操作,但必须有类似的解决方案(here?