Intellij打包jar文件,“java.lang.SecurityException: Invalid signature file digest for Manifest main attrib

开始使用如下代码进行打包

<build>
        <!-- mvn assembly:assembly -Dmaven.test.skip=true -->
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2-beta-5</version>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.fxc.rpc.impl.member.MemberProvider</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>assembly</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

结果出现spring命名空间无法找到的错误,

org.xml.sax.SAXParseException: schema_reference.4: 无法读取方案文档 ‘http://www.springframework.org/schema/beans/spring-beans.xsd‘, 原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是 <xsd:schema>。

据查是由于spring-core,spring-aop每一个jar中都包含了一套spring.handlers,spring.schemas文件,以至于在打包过程中发生了覆盖,网上没有搜到使用maven-assembly-plugin插件如何解决此问题,大多数人建议使用maven-shade-plugin插件,修改后pom代码如下

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer
                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.handlers</resource>
                    </transformer>
                    <transformer
                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.fxc.rpc.impl.member.MemberProvider</mainClass>
                    </transformer>
                    <transformer
                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.schemas</resource>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin> 

再次打包,出现文件签名不合法的问题

Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

再查,原来是由于某些包的重复引用,以至于打包之后的META-INF的目录下多出了一些*.SF,*.DSA,*.RSA文件所致(据说解压jar包,然后删掉这些文件再次打包错误就会消失,未确认),再次修改pom.xml,最终使用如下配置文件,运行

mvn clean install -Dmaven.test.skip=true

打包成功

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

                        <transformers>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.handlers</resource>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.fxc.rpc.impl.member.MemberProvider</mainClass>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.schemas</resource>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>

此时查看target目录下会发现xxx.jar 和original-xxx.jar,后一个不包含引用的jar包,直接运行前一个即可

java -jar target/xxx.jar 

成功!

PS:项目中使用了几个公司自己的jar,在公有库里没有,在eclipse里运行的时候我都是修改scope为system,调用的本地jar,但是在打包的过程中scope=system的jar是不会自己打进去的,很是让我郁闷,我只好讲这些jar安装进入本地资源库

mvn install:install-file -Dfile=my-jar.jar -DgroupId=org.richard -DartifactId=my-jar -Dversion=1.0 -Dpackaging=jar

原文地址:https://www.cnblogs.com/guohu/p/12044413.html

时间: 2024-11-05 23:19:49

Intellij打包jar文件,“java.lang.SecurityException: Invalid signature file digest for Manifest main attrib的相关文章

Invalid signature file digest for Manifest main attributes

Solving a Spark error: Invalid signature file digest for Manifest main attributes When using spark-submit to run a jar, you may encounter this error: Invalid signature file digest for Manifest main attributes The error occurs when one of the included

使用sqljdbc连接mssql数据库,maven生成jar运行后报&quot;Exception in thread &quot;main&quot; java.lang.SecurityException&quot;错误

错误信息如下: Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes 网上查到,说是需要重新打一下sqljdbc    http://blog.chinaunix.net/uid-26706281-id-3210704.html 把该博客的内容copy下来: 插件打成的jar包运行出现这个异常,异常处理办法 1.

阿里巴巴 fastjson-1.2.12.jar json解析异常java.lang.ClassFormatError: Invalid method Code length 66865 in class file com/alibaba/fastjson/serializer/ASMSerializer_6_UserKdlb

承接上篇:fastjson反序列化LocalDateTime失败的问题java.time.format.DateTimeParseException: Text '2019-05-24 13:52:11' could not be parsed at index 10 之前在线上用的版本是fastjson-1.2.7.jar 一切正常,更换以后时间解析看似一切正常. 因为在系统中设计json反序列化的地方比较多,刚刚放到生产环境,app那边的接口报错了 java.lang.ClassFormat

java.lang.SecurityException: JCE cannot authenticate the provider BC

和X公司对接数据,他们的开发语言是java,我们是php,双方数据通信的时候采用的加密方法是:bouncycastle 由于这个时间大神的限制,我们暂时不用PHP开发自己的加密算法,而是采用对方已有的加密包. 具体思路是: 1.将java写的的加密方法封装成jar包: 2.然后在php里面直接调用:exec("java -jar encrypt.jar")系统命令执行,实现加密解密 这里主要遇到2个问题: 1.cannot load mian class 2.调试过程中报错:java.

webloigc 使用 spring-loaded 报错,java.lang.SecurityException: 无法定位登录配置

spring-loaded是spring的一个开源项目,用于解决热部署的问题,类似于jrebel,但是jrebel是需要付费的,而spring-loaded则不需要,背景就先说到这,现在回归正传.今天按照官方指导文档,在weblogic的启动脚本(starWeblogic.bat)的SAVE_JAVA_OPTIONS中增加如下配置: -javaagent:D:\devtools\spring_loaded\springloaded-1.2.0.RELEASE.jar -noverify 天下无免

Intellij IDEA 报错java.lang.NoClassDefFoundError

Intellij IDEA 报错java.lang.NoClassDefFoundError 11-Aug-2018 23:48:24.686 严重 [http-nio-8080-exec-5] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [com.wbg.testservlet] in context with path [] threw exception [Servle

Eclipse将android项目打包jar文件

Eclipse+android打包jar文件 蔡建良 2016-3-12 以Android-SlideExpandableListView开源框架为例,将源码Library打包成jar文件并包含R.class. 开发环境: 1) Eclipse IDE for Java Developers Version: Mars.2 Release (4.5.2) 2) Android插件: ADT-23.0.4 将源码导入: 设置项目为Library: 将项目导出为jar文件: 将生成的main.jar

关于在打包Jar文件时遇到的资源路径问题(二)

在关于<关于在打包Jar文件时遇到的资源路径问题(一)>中,以及描述了当资源与可执行JAr分离时的资源路径代码的编写问题,后来想了想,为什么将<Java核心技术卷一>中的程序10-1即ResourceTest的Jar文件放在任何地方都可以执行呢? 图:将原本一起放入目录中的Jar放到桌面上,点击依然能执行 于是我将这个Jar包进行解压,发现在这个包中依然有资源,这就说明了这个包在脱离了原先目录而执行时,依据的资源路径应该是在自己的Jar包中.(至于这个Jar在原先目录时是根据自己包

Maven 3.3.3 with JDK1.7, java.lang.SecurityException

maven 3.3.3 with JDK1.7_79遇到java.lang.SecurityException问题 今天在另一台机器上安装了maven 3.3.3以及jdk1.7_79.在配置maven的时候,需要用到命令来生成password的加密code.如下: mvn -emp HelloWorld mvn -ep xxxxxxxxxx 但是,在windows command line下执行第一条命令时遇到如下错误: Caused by: java.lang.SecurityExcepti