【问题标题】:java.lang.SecurityException: no manifest section for signature file entryjava.lang.SecurityException:没有签名文件条目的清单部分
【发布时间】:2017-04-07 07:35:25
【问题描述】:

我在其他线程中尝试过建议,但它们对我没有帮助。 当我通过java -jar -BigJar.jar 运行我的 jar 时,我收到异常:

Exception in thread main java.lang.SecurityException: no manifest section for signature fil entry edu/iris/Pissures/IfSeismogramMgr/MotionVectorAttributeHelper.class

我的 ant 文件是

<project name="USGS VHP" default="help" basedir=".">
    <description>USGS VHP Main Build File</description>

    <property name="root" location="." />
    <property name="classdir" value="classes" />
    <property name="contrib" value="http://volcanoes.usgs.gov/software/contrib" />


    <target name="help">
        <echo>
Available targets:          
help    -- displays this help information
init    --
clean   -- deletes lib/*.jar files
touch   -- touch *.java in source tree
contrib -- download the contrib library (use before building)
build   -- build the USGS codebase (use after checkout *)
        </echo>
    </target>

    <target name="init">
    </target>



    <target name="clean">
        <delete>
            <fileset dir="${root}/lib/" includes="*.jar" />
        </delete>
    </target>

    <target name="touch">
        <touch>
            <fileset dir="${root}/../" includes="**/*.java" />
        </touch>
    </target>



    <target name="contrib" depends="init" description="Download the contrib libraries">
        <mkdir dir="${root}/contrib" />
        <get src="${contrib}/colt.jar" dest="${root}/contrib/colt.jar" />
        <get src="${contrib}/comm.jar" dest="${root}/contrib/comm.jar" />
        <get src="${contrib}/commons-collections-3.2.1.jar" dest="${root}/contrib/commons-collections-3.2.1.jar" />
        <get src="${contrib}/fissuresIDL-1.0.jar" dest="${root}/contrib/fissuresIDL-1.0.jar" />
        <get src="${contrib}/fissuresImpl-1.1.13.jar" dest="${root}/contrib/fissuresImpl-1.1.13.jar" />
        <get src="${contrib}/fissuresUtil-1.0.18.jar" dest="${root}/contrib/fissuresUtil-1.0.18.jar" />
        <get src="${contrib}/forms-1.0.7.jar" dest="${root}/contrib/forms-1.0.7.jar" />
        <get src="${contrib}/jai_codec.jar" dest="${root}/contrib/jai_codec.jar" />
        <get src="${contrib}/jai_core.jar" dest="${root}/contrib/jai_core.jar" />
        <get src="${contrib}/jnlp.jar" dest="${root}/contrib/jnlp.jar" />
        <get src="${contrib}/JSAP-2.1.jar" dest="${root}/contrib/JSAP-2.1.jar" />
        <get src="${contrib}/jtransforms-2.4.jar" dest="${root}/contrib/jtransforms-2.4.jar" />
        <get src="${contrib}/log4j-1.2.13.jar" dest="${root}/contrib/log4j-1.2.13.jar" />
        <get src="${contrib}/looks-2.0.4.jar" dest="${root}/contrib/looks-2.0.4.jar" />
        <get src="${contrib}/mysql.jar" dest="${root}/contrib/mysql.jar" />
        <get src="${contrib}/rrd4j-2.0.5.jar" dest="${root}/contrib/rrd4j-2.0.5.jar" />
        <get src="${contrib}/JavaSeedLite.jar" dest="${root}/contrib/JavaSeedLite.jar" />
        <get src="${contrib}/seedCodec-1.0.6.jar" dest="${root}/contrib/seedCodec-1.0.6.jar" />
        <get src="${contrib}/servlet.jar" dest="${root}/contrib/servlet.jar" />
        <get src="${contrib}/seisFile-1.5.2.jar" dest="${root}/contrib/seisFile-1.5.2.jar" />
        <get src="${contrib}/slf4j-api-1.7.1.jar" dest="${root}/contrib/slf4j-api-1.7.1.jar" />
        <get src="${contrib}/slf4j-log4j12-1.7.1.jar" dest="${root}/contrib/slf4j-log4j12-1.7.1.jar" />
        <get src="${contrib}/javassist.jar" dest="${root}/contrib/javassist.jar" />
        <get src="${contrib}/thymeleaf-2.0.13.jar" dest="${root}/contrib/thymeleaf-2.0.13.jar" />
        <get src="${contrib}/ognl-2.6.7.jar" dest="${root}/contrib/ognl-2.6.7.jar" />
        <get src="${contrib}/oscache-2.1-mod2.jar" dest="${root}/contrib/oscache-2.1-mod2.jar" />
        <get src="${contrib}/seedlink_lite_1.2.1.jar" dest="${root}/contrib/" />
        <get src="${contrib}/seedlink_lite_src_1.2.1.jar" dest="${root}/contrib/" />
        <get src="http://repo1.maven.org/maven2/com/h2database/h2/1.3.173/h2-1.3.173.jar" dest="${root}/contrib/h2.jar" />
    </target>



    <target name="build" depends="init" description="Build USGS codebase">
        <!-- Order is important.  Some projects depend on others. -->
        <ant target="jar" inheritAll="false" antfile="${root}/../Util/build.xml" />
        <ant target="jar" inheritAll="false" antfile="${root}/../Math/build.xml" />
        <ant target="jar" inheritAll="false" antfile="${root}/../Net/build.xml" />
        <ant target="jar" inheritAll="false" antfile="${root}/../Plot/build.xml" />
        <ant target="jar" inheritAll="false" antfile="${root}/../Pinnacle/build.xml" />
        <ant target="jar" inheritAll="false" antfile="${root}/../VDX/build.xml" />
        <ant target="jar" inheritAll="false" antfile="${root}/../Valve3/build.xml" />
        <ant target="jar" inheritAll="false" antfile="${root}/../Earthworm/build.xml" />
        <ant target="jar" inheritAll="false" antfile="${root}/../Winston/build.xml" />
        <ant target="jar" inheritAll="false" antfile="${root}/../Swarm/build.xml" />
    </target>

    <target name="jar" depends="build" description="Create one large jar file">
        <jar destfile="${root}/lib/usgs.jar">
            <fileset includes="**/**.class" dir="${root}/../Util/${classdir}" />
            <fileset includes="**/**.class" dir="${root}/../Earthworm/${classdir}" />
            <fileset includes="**/**.class" dir="${root}/../Math/${classdir}" />
            <fileset includes="**/**.class" dir="${root}/../Net/${classdir}" />
            <fileset includes="**/**.class" dir="${root}/../Pinnacle/${classdir}" />
            <fileset includes="**/**.class" dir="${root}/../Plot/${classdir}" />
            <fileset includes="**/**.class" dir="${root}/../Swarm/${classdir}" />
            <fileset includes="**/**.class" dir="${root}/../Valve3/${classdir}" />
            <fileset includes="**/**.class" dir="${root}/../VDX/${classdir}" />
            <fileset includes="**/**.class" dir="${root}/../Winston/${classdir}" />
        </jar>
    </target>

    <manifest file="lib/MANIFEST.MF">
        <attribute name="Main-Class" value="gov.usgs.swarm.Swarm" />
    </manifest>

    <jar destfile="SwarmMentics.jar" manifest="lib/MANIFEST.MF">
        <zipgroupfileset dir="contrib" includes="*.jar" />
        <zipgroupfileset dir="lib" includes="*.jar" />

        <zipfileset src="contrib/colt.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/comm.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/commons-collections-3.2.1.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/commons-net-3.2.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/fissuresIDL-1.0.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/fissuresImpl-1.1.13.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/fissuresUtil-1.0.18.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/forms-1.0.7.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/h2.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/jai_codec.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/jai_core.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/JavaSeedLite.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/javassist.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/jgoodies-looks-2.5.3.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/jnlp.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/JSAP-2.1.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/jtransforms-2.4.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/log4j-1.2.13.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/looks-2.0.4.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/mysql.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/ognl-2.6.7.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/oscache-2.1-mod2.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/rrd4j-2.0.5.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/seedCodec-1.0.6.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/seedlink_lite_1.2.1.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/seedlink_lite_src_1.2.1.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/seisFile-1.5.2.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/servlet.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/slf4j-api-1.7.1.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/slf4j-log4j12-1.7.1.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="contrib/thymeleaf-2.0.13.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>

        <zipfileset src="lib/earthworm.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="lib/math.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="lib/net.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="lib/pinnacle.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="lib/plot.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="lib/swarm.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="lib/usgs.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="lib/util.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="lib/valve.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="lib/vdx.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
        <zipfileset src="lib/winston.jar">
            <exclude name="**/*.RSA, **/*.SF, **/*.DSA" />
            <exclude name="META-INF/MANIFEST.MF"/>
        </zipfileset>
    </jar>
</project>

如您所见,我从每个 jar 中排除了 RSA、SF 和 DSA 文件以及 MANIFEST.MF。

但它并不能帮助我解决这个错误。

如果你知道,请回复。

谢谢!

【问题讨论】:

    标签: java security ant


    【解决方案1】:

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

    要使其正常工作,您需要先从已签名的 jar 中删除所有签名文件,然后再将解压缩的文件复制到最终构建 jar 文件中。

    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-shade-plugin</artifactId>
       <executions>
          <execution>
             <phase>package</phase>
                <goals>
                   <goal>shade</goal>
                </goals>
          </execution>
       </executions>
       <configuration>
          <finalName>${project.artifactId}-${project.version}-uber</finalName>
          <filters>
             <filter>
                <artifact>*:*</artifact>
                   <excludes>
                      <exclude>META-INF/*.SF</exclude>
                      <exclude>META-INF/*.DSA</exclude>
                      <exclude>META-INF/*.RSA</exclude>
                   </excludes>
                </filter>
             </filters>
       </configuration>
    </plugin>
    

    【讨论】:

    • 抱歉,我使用的是 ANT,并且在我的 ant 文件中,我在发布之前已经这样做了。
    • 看看我的 ant 文件的末尾。我在另一个帖子里读过这个
    【解决方案2】:

    看来您可能会包含两次罐子。首先使用 zipgroupfilesets,然后再使用一系列 zipfilesets。

    您可能可以删除 zipgroupfilesets。

    我相信您的排除项也存在问题。 您可以将其更改为:

    <zipfileset src="contrib/fissuresUtil-1.0.18.jar">
        <exclude name="**/*.RSA" />
        <exclude name="**/*.SF" />
        <exclude name="**/*.DSA" />
    </zipfileset>
    

    或者这个:

    <zipfileset src="contrib/fissuresUtil-1.0.18.jar" excludes="**/*.RSA,**/*.SF,**/*.DSA"/>
    

    有关更多信息,请参阅http://ant.apache.org/manual/Types/fileset.html(zipfileset 是一种文件集形式)。

    另一方面,这样的事情可能会简化一些事情:

    <jar destfile="SwarmMentics.jar" manifest="lib/MANIFEST.MF">
        <restrict>
            <not>
                <or>
                    <name name="**/*.RSA"/>
                    <name name="**/*.SF"/>
                    <name name="**/*.DSA"/>
                </or>
            </not>
            <archives>
                <zips>
                    <fileset dir="contrib" includes="**/*.jar"/>
                    <fileset dir="lib" includes="**/*.jar"/>
                </zips>
            </archives>
        </restrict>
    </jar>
    

    我根据“合并档案”部分下http://ant.apache.org/manual/Tasks/jar.html 的示例改编了这个。

    【讨论】:

      【解决方案3】:

      只需删除您导入的签名 jar 中的 *.SF 文件(在 meta_inf 文件夹中)

      【讨论】:

        猜你喜欢
        • 2023-03-23
        • 2017-03-24
        • 1970-01-01
        • 2012-03-24
        • 1970-01-01
        • 2016-10-03
        • 1970-01-01
        • 2018-02-17
        • 2012-04-02
        相关资源
        最近更新 更多