IntelliJ导出可运行的jar包

  1. 创建一个Java项目
    在这里插入图片描述
    这样创建出来的项目会自带一个Java类:Main.java,如下:
    在这里插入图片描述
    在这里插入图片描述

  2. 打开项目结构(Ctrl + Shift + Alt + S),然后操作如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如上图,它会自动搜索出Main这个主类,选择这个主类然后点确定即可,确定后如下:
    在这里插入图片描述
    如上图,如果点那个图标没有自动搜索出主类的话,可手动把拥有main函数的类名输入进去(因为我的Main直接放在了根目录,没用包名,如果该类是放在某个包下面的,则需要连同包名一起输进去,比如:com.example.Main)。在设置META-INF/MANIFEST.MF的目录时,它自动是选择到src目录的,我们要修改为根目录,如下:
    在这里插入图片描述
    在这里插入图片描述
    如上图,这样就设置好一个 ‘工件’ 了,可以看到jar包名称和输出目录,这些可以根据需要去修改。
    现在,在项目根目录中可以看到多了一个META-INFO的目录,如下:
    在这里插入图片描述
    打开它里面的文件(MANIFEST.MF),这个文件指定了我们的主类,即运行jar的时候它会运行这个类的main函数,该文件内容如下:
    在这里插入图片描述

  3. 通过构建菜单来构建出jar包
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这样我们就拥有了一个可以直接运行的jar包了,在cmd中直接进入到该jar包目录下运行该jar包(java -jar xxx.jar),效果如下:
    在这里插入图片描述

  4. 注意事项

    • 不论是创建java项目还是kotlin项目,导出可运行jar包步骤都是一样的,也不论创建的项目是否使用gradle,步骤还是一样的。
    • 需要注意的是,在选择META-INFO/MANIFEST.MF的目录时,一定要手动修改一下,不要使用默认的目录,要手动改为使用项目的根目录,否则生成的jar包可能无法运行,这个应该是IntelliJ的bug。
    • 如果创建的项目使用gradle时,在选择模块时,我们可以选择main模块,如下:
      在这里插入图片描述
      默认是选择 “所有模块”,选main模块的话生成的jar包更小。
    • 如果是kotlin项目,即使你只有一个简单的main.kt文件,但是kotlin最终是需要编译为class的,使用的kotlin相关的api的依赖肯定也需要一起编译到jar包里面,否则运行的时候肯定是要出错的(比如找不到类),这也是为什么我们在创建工件时选择 “来自具有依赖项的模块” 的原因,它会自动把用到的类的相关依赖一起打包到目标jar中:
      在这里插入图片描述
      这样创建的工件也能看到它最终依赖了哪些jar包,如下:
      在这里插入图片描述
      这里可以看到kotlin是依赖了两个jar包的。如果我们创建的jar包不是一个可运行jar包,而是一个工具类型的jar包,比如我们写了一个json解析的实现,需要导出一个jar包给别人用,假设我是用kotlin语言写的,此时我可以选择导出不带依赖的jar,在创建工件时选择空即可,如下:
      在这里插入图片描述
      因为别人在使用你的jar包时,它的开发环境本来就有kotlin环境了,如果你的jar包里又带有kotlin的那些类,这就重复了。当然了,如果你依赖的是一些第三方库,则别人的项目中就必须手动也添加那个第三方库的依赖,否则你的jar中的代码就会找不到这个第三方库的类了。或者你直接把第三方库的依赖导入进你的jar也是可以的,但是一般不会这么做,这样你的jar包就变大了,而且在第三方库有新版本时,别人要等你更新jar包,这样不方便,如果是把第三方打进jar包,则别人可以自己更新第三方的依赖,这样比较方便。

相关推荐

  1. Linux下运行jar方式

    2024-01-31 15:18:03       10 阅读
  2. docker 运行jar

    2024-01-31 15:18:03       27 阅读
  3. 服务器永久运行jar(linux系统)

    2024-01-31 15:18:03       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-31 15:18:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-31 15:18:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-31 15:18:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-31 15:18:03       18 阅读

热门阅读

  1. 记一次日志被吞,只有异常类型,没有堆栈信息

    2024-01-31 15:18:03       33 阅读
  2. C语言-算法-最短路

    2024-01-31 15:18:03       31 阅读
  3. 二分查找下界(c++题解)

    2024-01-31 15:18:03       29 阅读
  4. StarRocks jvm 及 异步物化视图 配置

    2024-01-31 15:18:03       29 阅读
  5. 商务英语VR智能互动教学系统

    2024-01-31 15:18:03       41 阅读
  6. leetcode 1921

    2024-01-31 15:18:03       30 阅读
  7. iOS 集成 Flutter Module

    2024-01-31 15:18:03       31 阅读