Java编译的jar运行之坑

平时基本上不用Java,奈何有个项目要与第三方平台对接,第三方平台的某些功能是需要严格使用对方提供的接口调用,与java深度绑定,用C#模拟对方给的javasdk去请求也不行,只好用java写一个调用对方sdk获取请求结果的api,再通过C#调用自编的java api(其实我的功能很简单,完全可以直接用java写完,本身c#写的部分也是webapi,就是懒,就是不愿意整java......)。

调试很正常,一上午的时间就满足了构想,实现了用java通过第三方sdk获取要取的数据,c#也实现了调用自编的java api,但是在java打包成jar,并在cmd部署的时候,总是出错。出错类型主要有两类:
1、使用meavn打包的jar,报 'A JNI error has occurred,please check your installation and try again'错误,百度上大部分都是说java版本冲突,实际上很扯淡,很多时候根本部署版本冲突。
2、使用工件打包的jar,报Exception in thread "main" java.lang.NoClassDefFoundError...。

其实我都能猜到,我这里的错误是因为引用一部分第三方包,但是打包的时候没给我打进去,百度搜索关于怎么打包完整,得到的信息很多都没用,直到看到了这篇IDEA如何打包可运行jar,外部引用jar包版
,才有点思路。

最后还是采用工件的方式打包

  1. 设置工件,设置主类,注意选复制到输出目录并通过清单链接,META-IN/MANIFEST.MF设置到src目录即可
  2. 在<输出跟>右键点创建,建一个libs文件夹,并将下面的依赖项jar都拖到libs中(按住ctrl键、shift键可以多个一起拖)
  3. 点我们本次要打包的jar,设置项目的类路径(classpath),跟第二部的一致( 其实默认都有了,我们因为把他放在了libs里,所以每一项前面加个libs/ )
  4. 构建工件即可,涉及到的依赖库都在libs了。
posted @ 2022-05-14 22:59  GIS民工  阅读(180)  评论(0编辑  收藏  举报