IntelliJ IDEA 2017 打包jar和相关问题处理

xiaoxiao2021-02-28  99

记录一下自己用IntelliJ IDEA打包jar的问题。主要是最近写了tinify的java版,打包jar出了点小问题,所以在这里记录一下。 先简单介绍一下用IntelliJ IDEA打包的流程,后面有就遇到的打包问题来说明如何解决。

一、jar打包流程

IntelliJ IDEA本身已经做得很强大了,我们只需要按照它提供的功能来操作就行了。这里是以我上篇文件写的java版tinify的api打包jar为例子讲的。

菜单:文件->项目结构…(也可以按快捷键ctrl+alt+shift+s) 在弹窗最左侧选中Artifacts->左数第二个区域点击”+”,选择jar,然后选择from modules with dependencies,然后会有配置窗口出现 最终的创建jar面板 必须注意的是,必须有MANIFEST.MF文件。你创建的时候会自动创建这个文件的生成jar文件 内部版本号菜单 弹出的小面板 默认情况,生成的jar文件在classes下面 运行jar文件 E:\workspaces\JavaProjects\tinifyJava\classes\artifacts\tinify_jar>java -jar tinify.jar

二、打包jar有可能遇到的错误

有时,你打包出来的jar会出现这种情况

E:\workspaces\JavaProjects\tinifyJava\classes\artifacts\tinify_jar>java -jar tinify.jar tinify.jar中没有主清单属性

解压tinify.jar,查看它的MANIFEST.MF文件内容

Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: jwilson Created-By: Apache Maven 3.2.3 Build-Jdk: 1.8.0_45

发现这个内容和我们src里面的MANIFEST.MF文件内容不一样,这个是src下面的MANIFEST.MF文件内容

Manifest-Version: 1.0 Main-Class: TinifyClient

两者的区别是

Main-Class: TinifyClient

明明是按照操作说明那里,在src下面增加MANIFEST.MF(自动生成的),为什么打包还是会出错呢。 后来仔细想了一下,发现编译后class的文件夹没有对应的MANIFEST.MF文件。

jar打包是需要class文件的,那么自然也是读取这个目录的MANIFEST.MF文件了。所以把MANIFEST.MF复制到默认生成class文件的文件夹:target,再次打包jar,问题得以解决。最终输出结果:

E:\workspaces\JavaProjects\tinifyJava\classes\artifacts\tinify_jar>java -jar tinify.jar E:\workspaces\JavaProjects\tinifyJava\classes\artifacts\tinify_jar 根据配置来压缩图片 上传:E:\tinify\input\mail\bg\bg.png

终于可以正常运行了!

转载请注明原文地址: https://www.6miu.com/read-64143.html

最新回复(0)