创建合并jar文件时出错-没有签名文件条目javax/mail/internet/ContentDisposition.class的manifiest部分

创建合并jar文件时出错-没有签名文件条目javax/mail/internet/ContentDisposition.class的manifiest部分,java,ant,jar,Java,Ant,Jar,我在/libs/中有一些jar文件,我的项目类位于/target/。删除对外部文件夹的依赖关系。我想制作一个合并jar文件。它包含在all/libs/*.jar中找到的jar文件中的所有类 我正在使用以下Ant脚本: <jar destfile="mytest.jar" basedir="target/classes"> <manifest> <attribute name="Main-Class" value="com.mytest.MyP

我在/libs/中有一些jar文件,我的项目类位于/target/。删除对外部文件夹的依赖关系。我想制作一个合并jar文件。它包含在all/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/ContentDisposition.class没有manifiest节 位于sun.security.util.SignatureFileForever.verifySection(未知源) 位于sun.security.util.SignatureFileLeverifier.processImpl(未知源)


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

我建议将所有jar文件取消保存到lib文件夹中,然后将jar与源代码一起使用,试试看它是否适合您。

使用Maven和shade插件。看看

<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>
线程“main”java.lang.SecurityException中的异常:没有用于签名文件条目的manifiest节

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

要使其正常工作,您需要先从已签名的jar中删除所有签名文件,然后再将未打包的文件复制到最终的构建jar文件中。请注意,如果不支持在jar存档中排除文件,请尝试使用以下文件列表:


... ...

像这样的东西可能适合你

<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>


在“合并存档”部分下。

有时它会触发:线程“main”java.lang中的异常。安全异常:清单主属性的签名文件摘要无效我尝试了您的解决方案,在我的情况下,有许多JAR,因此我使用。但它复制了结果jar中的所有jar,而不是将每个类提取到新jar中。这将导致classnotfound错误。@AsifShahzad,用于指定单个jar存档,没有任何意义,classnotfound错误是预期的,因为您没有在最终jar中包含任何jar库。如果您有许多jar,并且您确定mail.jar是唯一有签名的jar,请尝试与单独指定/处理有签名的mail.jar的jar一起使用。哦,对不起,我的意思是,这是打字错误。无论如何。。。我做的和上面不完全一样,但几乎是在同一条车道上。我在不排除任何内容的情况下创建了consolidated jar,然后从中移动了所有RSA、SF和DSA文件。它工作得很好。非常感谢。我们的构建系统是基于蚂蚁的。Maven有点复杂,事实上我和Maven联系在一起,所以我想用蚂蚁来做,如果没有其他选择,那么会考虑Maven的插件。谢谢。我看到了一个用shade pluginI制作的罐子也有同样的问题。我可以确认我是从maven shade得到这个错误的plugin@grinchmaven shade插件为我工作。您只需要使用一些排除过滤器。有关详细信息,请查看此链接