场景
用IDEA开发一个Java控制台程序,项目完成后,打包给客户使用。
做法
首先用IDEA打开要生成jar的项目,打开后选择File->Project Structure...
选择Artifects选项再点击+号
选择JAR,再选择From modules with dependencies...,来新增一个Artifect
弹出对话框让我们配置这个Artifect
- Main Class 选择程序入口类,也就是main方法所在的类
- Directory for META-INF/MANIFEST.MF,选择入口类所在的src目录
设置完后点击OK
如果想要将资源文件(图片,音频,视频,二进制文件等)打包到jar中。在Output Layout标签卡下,点击+,选择Directory Content
选择你想打包的文件所在的文件夹,这里我选择assets
这样子做之后,如果直接打包会把assets目录下的文件和文件夹打包进jar,不会把assets目录本身打包进jar,如果想连同assets目录打包进jar,那么继续。
在我们刚添加的项右键,点击Surround With...
选择Directory
创建一个文件夹将它包裹起来。
包裹起来后,点击OK回到IDEA主界面
最后,点击Build->Build Artifacts...
弹出一个对话框,点击Build,生成jar文件
生成的jar文件在工程目录下的classes/artifacts/<工程名>_jar
下找到
用java -jar
命令尝试运行生成的jar,没有问题。说明生成成功
我们查看jar里面的文件结构,也符合预期。
读取资源
在java代码中,如果要读取资源,可以通过<ClassName>.class.getClassLoader().getResourceAsStream(path);
这种方式得到一个资源文件的InputStream。
上面的getResourceAsStream方法,path参数要传进去资源的相对路径,比如在jar中的assets目录下有个sound.mp3的文件,那么就写getResourceAsStream("assets/sound.mp3")