创建一个Java项目
这样创建出来的项目会自带一个Java类:Main.java
,如下:
打开项目结构(
Ctrl + Shift + Alt + S
),然后操作如下:
如上图,它会自动搜索出Main
这个主类,选择这个主类然后点确定即可,确定后如下:
如上图,如果点那个图标没有自动搜索出主类的话,可手动把拥有main函数的类名输入进去(因为我的Main直接放在了根目录,没用包名,如果该类是放在某个包下面的,则需要连同包名一起输进去,比如:com.example.Main
)。在设置META-INF/MANIFEST.MF
的目录时,它自动是选择到src
目录的,我们要修改为根目录,如下:
如上图,这样就设置好一个 ‘工件’ 了,可以看到jar包名称和输出目录,这些可以根据需要去修改。
现在,在项目根目录中可以看到多了一个META-INFO
的目录,如下:
打开它里面的文件(MANIFEST.MF
),这个文件指定了我们的主类,即运行jar的时候它会运行这个类的main函数,该文件内容如下:
通过构建菜单来构建出jar包
这样我们就拥有了一个可以直接运行的jar包了,在cmd中直接进入到该jar包目录下运行该jar包(java -jar xxx.jar
),效果如下:
注意事项
- 不论是创建
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包,则别人可以自己更新第三方的依赖,这样比较方便。
- 不论是创建
IntelliJ导出可运行的jar包
2024-01-31 15:18:03 44 阅读