创建合并jar文件时出错-签名文件条目javax/mail/internet/ContentDispositon.cla



我在/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>

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

线程"main"java.lang.SecurityException中的异常:签名文件条目javax/mail/internet/ContentDispositon.class没有manifest部分位于sun.security.util.SignatureFileVerifier.verifySection(未知源)位于sun.security.util.SignatureFileVerifier.processImpl(未知源)

如果有任何想法,如何制作一个没有此类问题的合并jar,我们将不胜感激。我正在使用IntelliJ IDEA。

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

这个错误消息告诉为什么捆绑jar不推荐用于生产发布。问题是你的一些依赖jar是用签名文件签名的。重新打包它可能会违反依赖jar上的一些安全策略。

为了使它发挥作用,您需要从已签名的jar中删除所有签名文件,然后将未打包的文件复制到最终的构建jar文件中。注意<zip组文件集>不支持在jar归档中排除文件,请尝试使用<zip文件集>相反:

<zipfileset src="libs/mail.jar">
  <exclude name="**/*.RSA, **/*.SF, **/*.DSA"/>
</zipfileset>
... ...

这样的东西可能对你有用。

<jar destfile="mytest.jar" basedir="target/classes">
    <restrict>
        <not>
            <or>
                <name name="**/*.RSA"/>
                <name name="**/*.SF"/>
                <name name="**/*.DSA"/>
            </or>
        </not>
        <archives>
            <zips>
                <fileset dir="libs" includes="**/*.jar"/>
            </zips>
        </archives>
    </restrict>
    <manifest>
        <attribute name="Main-Class" value="com.mytest.MyProcessor"/>
    </manifest>
</jar>

我根据http://ant.apache.org/manual/Tasks/jar.html在"合并档案"部分。

使用Maven和shade插件。看看http://maven.apache.org/plugins/maven-shade-plugin/

我建议将所有jar文件解压缩到lib文件夹中,然后与源代码一起进行jar,尝试一下它可能对您有用。

相关内容

  • 没有找到相关文章

最新更新