转载自:https://blog.csdn.net/dominic_z/article/details/82791790
我们先看看实例项目
这个项目里包括
一个数据文件,位于’data/data’
一个自定依赖库,位于’lib/’下
还有一个主java文件,位于‘src/MyClass.jar’
(如何添加jar包请访问Intellij IDEA 添加jar包的三种方式)
然后我们开始打jar包
1.首先打开project structure
2.然后按下图顺序点击
3.对于弹出的界面有两种打jar包的方式
最上面的module指的就是相对哪个项目打包
第二行的main class 就是指定主类
下面的JAR files from libraries有两个选项,这个是用来决定如何处理我们自己添加的第三方依赖库的,比如我的项目里包含了java链接mysql的依赖包
第一个选项extract to …,指的是,将全部依赖包和你自己写好的java代码,都打进一个包里,也就是最终只会输出一个jar包
第二个选项copy to the output …,指的是,将依赖包和自己写好的代码打到不同的jar包里,并且这些jar包的依赖联系是根据一个自动生成的anifest文件联系起来的,例如,如果项目有两个依赖jar文件,那么最终输出的jar一共有三个,分别自己写的java代码组成的一个jar和另外两个依赖jar
假设我们选第一个extract to target JAR,点击ok
3.jar内文件设置
之后我们便来到了关键的最难以看明白的一步
下图中,最上面的name指的是这个Aritifacts的名称(注意这不是输出jar的名称)
中间的Output directory指的是输出的路径
图中左边红框,即区域1代表的是最终输出的东西是什么样的
可以看到区域1里有一个jar_test.jar,这个就是基于我们写的代码输出的一个jar包,可以改名字哦,右键‘jar_test.jar’可以看到rename,点击就可以改名字了
这个jar包里还有两行,第一行指的是“从xxx.jar中抽取的东西”,因为之前我们选的是extract to target JAR;第二行内容指的是,我们的java代码编译后的输出,也就是我们写的各种package和class啦。
在区域1选中jar包的情况下,图最下面会有我们打jar包的manifest文件相关信息,没错,不管以哪种方式打jar包,manifest文件都会生成
【这部分可忽略】
区域2是可用元素,就是说目前还可以把什么东西添加到jar包里,那个lib是我自己设置的一个库,不懂的话可以忽略,目前没什么可以添加的,我们来做个实验
于是就变成了下图这样,左边的东西跑到右边了,加回来的方式有两种,要么双击跑到右边的’jar_test’ complie output,要么点击那个加号,然后点击module output,就不截图了
好我们再把那个“Extracted ‘mysql-…’”给“减掉”,操作与上面一样,选中之后点击“-”,会发现这个东西没有跑到右边去,如下图所示,别慌
点击加号后选中Extracted Directory
会出现如下所示的一个对话框,沿着路径自己找到那个被删除的jar包,点击OK,他就回来了,以这种方式我们还可以添加其他的jar包
4.别急,如果想要把数据打进去怎么办
可以看到我们这个jar包里现在并没有上面用到的数据文件,接下来需要把data目录下的文件打入jar包,操作与上面类似,点击“+”后,选择Directory Content,意思就是把某个文件夹里的全部内容打到jar里
在弹出的框里找到目标文件夹并选中,注意这时选中的是文件夹,点击OK就可以了
5.大功告成
点击下面的Apply,或者OK
然后点击导航栏中的Build,然后选中Build Aritifacts
现如下这么个东西,左边的jar_test:jar,就是这个artifacts的名字,上面我们提到过,第一次点Build,再次编译点rebuild
之后就可以在artifact中设置对应的路径找到我们打好的jar包了
6.注意
在步骤3中,如果我们选中的是“copy to the output…”的话,其他的设置也是大同小异,可以自己尝试
另外如果某个module要重新设置或者新增artifacts的话,有时候会报错“MANIFEST.MF already exists in VFS”,要把上一次生成的MANIFEST.MF文件彻底删除就行,不仅要丢进回收站后,还要在回收站内删除
测试这个jar包,打开cmd命令窗口,进入jar包所在目录,键入:java -jar Calculator.jar