目录
Jar文件
使用java命令打包jar文件
使用IDEA打包Jar文件
运行jar包
如何在项目中导入外部 jar 文件
Jar(Java Archive File),是 Java 的一种文档格式。Jar 文件非常类似ZIP 文件——准确的说,它就是 ZIP 文件,所以叫它文件包。JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的。jar文件是一种封装,使用jar文件的人不需要知道jar文件中有多少个.class文件,每个文件中的功能与作用,只需要提供的接口即可。
jar包:通常是开发时要引用通用类,打成包便于存放管理。war包:做好一个web应用后,通常是网站,打成包部署到容器中。ear包:企业级应用,通常是EJB打成ear包。新建test.java文件,然后将其编译成class文件
新建src目录,将生成的test.class文件移动到src目录中去
新建一个文件,名字可以任意起。我这里就叫manifest,内容如下。注意这里的冒号后面要有空格,然后每行需要有换行符。这个文件用于指定加载的主类
Manifest-Version: 1.0 Main-Class: test然后执行以下命令进行打包成jar文件,
jar -cvfm test.jar manifest -C src/ . jar后面的-m选项会将第2步新建的文件合并到 jar包中的 META-INF/MANIFEST.MF,也就是更新清单配置文件。-C 后面指定要打包的目录, 目录后面的 . 代表目录下所有文件使用IDEA创建了一个 Jar_test 项目后,我们随便创建了四个类。其中,Main.java是主类。
然后右键——>打开模块设置
点击 Artifacts——>JAR——>From modules with dependencies
然后选择项目模块和这个项目的主类
点击 生成——> Build Artifacts
然后在 out\artifacts\ 目录下就会生成 Jar_test.jar 文件
将Jar_test.jar文件解压缩后内容如下:
那几个类都被编译成class文件了。
我们经常看到会使用 java -cp xx.jar 和 java -jar xx.jar 命令运行jar包。
java -cp
java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库和jar包,需要全路径到jar包,多个jar包之间连接符:window上分号 “;” 、Linux下使用 “:”。
windows环境: java -cp .;d:\work\other.jar;d:\work\my.jar packname.mainclassname linux环境: java -cp .:/hone/myuser/work/other.jar:/hone/myuser/work/my.jar packname.mainclassname 表达式支持通配符,例如: java -cp .;c:\work\my.jar;c:\work\*.jar packname.mainclassname java -cp .:/home/myuser/work/lib/my.jar:/home/myuser/work/dependency_jars/*.jar packname.mainclassnamejava -jar
执行该命令时,会用到目录 META-INF\MANIFEST.MF 文件,在该文件中,有一个叫Main-Class的参数,它说明了java -jar命令执行的类。java -jar方式不可以指定附加依赖jar包。
备注:
打包时指定了主类,可以直接用java -jar {xxx.jar}。打包时没有指定主类,可以用 java -cp {xxx.jar} {主类名称的绝对路径},如:java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099要引用其他的 jar 包,可以用 java -cp {$CLASSPATH}:{xxxx.jar} {主类名称的绝对路径}。其中 -classpath 指定需要引入的类。ctrl+shirt+alt+s 组合键打开,然后 Modules——>Dependencies,然后右边的 + 号
然后选择第1个JARs or directories,然后选择jar文件的路径,确定即可。