创建统一jar文件时出错 - 签名文件条目javax/mail/internet/ContentDisposition.class没有最明显的部分

Asi*_*zad 4 java ant jar

我在/ libs /中有一些jar文件,我的项目类位于/ target /.删除对外部文件夹的依赖性.我想制作一个合并jar文件.其中包含所有/libs/*.jar中找到的jar文件中的所有类

我正在使用以下Ant脚本:

<jar destfile="mytest.jar" basedir="target/classes">
    <manifest>
        <attribute name="Main-Class" value="com.mytest.MyProcessor"/>
    </manifest>

    <fileset dir="target/classes" includes="**/*.class"/>
    <zipgroupfileset dir="libs" includes="*.jar"/>
</jar>
Run Code Online (Sandbox Code Playgroud)

但是,当我使用"java -jar mytest.jar"命令运行jar时,它说:

线程"main"中的异常java.lang.SecurityException:sun.security.util.Suature.SignatureFileVerifier中sun.security.util.SignatureFileVerifier.verifySection(未知来源)的签名文件条目javax/mail/internet/ContentDisposition.class没有最明显的部分.processImpl(未知来源)

任何想法,如何制作一个没有这些问题的统一罐子,将受到高度赞赏.我正在使用IntelliJ IDEA.

yor*_*rkw 9

线程"main"中的异常java.lang.SecurityException:签名文件条目没有最明显的部分

此错误消息确切地说明了为什么不建议将捆绑jar用于生产版本.问题是你的一些依赖jar用签名文件签名.重新包装它可能会违反依赖jar上的某些安全策略.

要使其工作,您需要从已签名的jar中删除所有签名文件,然后将解压缩的文件复制到最终的构建jar文件中.请注意,<zipgroupfileset>不支持jar存档中的排除文件,请尝试使用<zipfileset>列表:

<zipfileset src="libs/mail.jar">
  <exclude name="**/*.RSA, **/*.SF, **/*.DSA"/>
</zipfileset>
... ...
Run Code Online (Sandbox Code Playgroud)