java项目打为jar包后,依赖没有一同打包的解决方法。

使用某产品的官方javasdk写了个小工具,想打包放在服务器上跑。
通过Maven来package之后,尝试运行。报了错:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: com/alibaba/fastjson/JSON
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.privateGetMethodRecursive(Unknown Source)
        at java.lang.Class.getMethod0(Unknown Source)
        at java.lang.Class.getMethod(Unknown Source)
        at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.alibaba.fastjson.JSON
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 7 more

我一开始还以为是这个fastjson的依赖出了问题,但是当我打开这个jar包后,发现只有120k大小,而pom里头明明引用了数不清的依赖,这不科学啊。
在这里插入图片描述
经过百度,确认是因为没有在pom中引入maven的打包插件导致依赖没有被打包造成的。
在pom文件下的<build><plugins> ..... </plugins> </build>标签下加入了maven-shade-plugin插件得到解决。
插件引用如下:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId> maven-shade-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.okex.program.MainClass</mainClass>  <!--这里为运行类! -->
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

参考:https://www.cnblogs.com/hark0623/p/6252920.html

但是在随后的启动中,执行java -cp xxxx.jar com.oprsystem.program.MainClass main又报:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread “main” java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

这个异常,百度后,参考:https://blog.csdn.net/mingyuli/article/details/84674483。
删除了jar包文件中META-INF目录下的*.SF和*.RSA文件得到了解决。

猜你喜欢

转载自blog.csdn.net/chinatopno1/article/details/120814094