java.lang.SecurityException:签名文件没有最明显的部分(RSA,SF,DSA文件和MANIFEST.MF除外)

时间:2016-11-10 12:56:12

标签: java ant jar

下面是我的ant build jar目标:

<target name="build jar" depends="compile">

        <mkdir dir="${dist.home}" />

        <jar destfile="${dist.home}/${app.name}.jar" basedir="${build.home}/classes">
            <zipgroupfileset dir="${lib.home}" includes="*.jar" excludes="*.RSA, *.SF, *.DSA, META-INF/MANIFEST.MF" />  

            <manifest>
                <attribute name = "Main-Class" value = "com.karthik.publisher"/>
            </manifest>
        </jar>

    </target>

当我从命令提示符运行/执行jar时,我收到以下错误

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.SecurityException: no manifiest section for signature file entry javax/mail/SecuritySupport.class
        at sun.security.util.SignatureFileVerifier.verifySection(Unknown Source)
        at sun.security.util.SignatureFileVerifier.processImpl(Unknown Source)
        at sun.security.util.SignatureFileVerifier.process(Unknown Source)

正如您所看到的,我从每个jar中排除了RSA,SF和DSA文件以及MANIFEST.MF,但我仍然遇到此异常。

1 个答案:

答案 0 :(得分:0)

excludes任务中的build jar定义仅涵盖jar文件根目录中的.RSA .SF和.DSA文件。但是它们位于META-INF子目录中。

  • *.RSA - &GT;涵盖要合并的zip / jar文件根目录中的RSA文件
  • **/*.RSA - &GT;涵盖要合并的zip / jar文件中的RSA文件
  • META-INF/*.* - &gt;涵盖META-INF目录中的所有文件

我建议您使用第三种方法,因为我没有看到任何jar将文件放在合并jar的META-INF目录中的原因。