使用idea将java程序和依赖包打包为一个可运行的jar程序

使用idea将java程序和依赖包打包为一个可运行的jar程序

有时候用java编写一些工具程序,打包成一个单独jar包,只要有java环境就可以运行。

而且有可能会有修改源码放到一个陌生环境去编译的需求,这时候就需要将项目源码和依赖的lib库文件放一起,只要有jdk和idea就可以修改源码、编译打包,而不用搭建maven环境(有时候环境可能没有联网)。

下面是一个用来打包的示例工程:
在这里插入图片描述

配置步骤

  • 创建一个library指向包含依赖外部jar的目录:
    在这里插入图片描述

  • 创建一个artifacts:

    在这里插入图片描述

  • 选择main函数所在类

    在这里插入图片描述

  • 构建jar包

    点击【Build】->【Build Artifacts】->【Build】,打包成功。

  • 执行测试

    PS C:\work\dev\javahello\out\artifacts> java -jar .\javahello_jar\javahello.jar
    Hello World!
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    Windows
    PS C:\work\dev\javahello\out\artifacts>
    

    如果直接在idea里面点【运行】可以执行成功,但是打包的jar包执行时报库中的类没有找到:

    PS C:\work\dev\javahello\out\artifacts\javahello_jar> java -jar .\javahello.jar
    Hello World!
    Exception in thread "main" java.lang.NoClassDefFoundError: oshi/SystemInfo
            at Main.main(Main.java:7)
    Caused by: java.lang.ClassNotFoundException: oshi.SystemInfo
            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)
            ... 1 more
    

    那可能是因为在创建Artifacts之后,再把jar包放到lib目录中的。如果是这样只需要把原来创建的Artifacts删了重新创建一个,重新创建的时候会提示MANIFEST.MF文件已经存在,把MANIFEST.MF删除后重新创建Artifacts就行。

    也就是说【创建Artifacts】这一步要在加lib库文件之后做。

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

TiiiiiiiME

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值