阅读 93

java -jar和-cp的区别

前言

在Linux中执行Java程序的时候,需要使用java -jar或者java -cp来指定要运行的jar,两种方式的运行机制的不一样的,今天就来盘点一下这两种运行方法的区别。

执行程序

假如我们有一个程序,这里把它打包成Test.jar,如何运行才能成功输出Hello World。

代码如下:

package com.test; public class Test {     public static void main(String[] args) {         System.out.println("Hello World");     } } 复制代码

我们常见的有以下两种方法运行:

1. java -jar Test.jar 2. java -cp com.test.Test Test.jar 复制代码

这里就先分析一下-jar运行方式的机制。

java -jar

我们解压jar包,里面的META-INF文件夹下都有MANIFEST.MF

内容如图:

我们知道想要运行一个Java程序,必须要有一个main()方法作为入口,这样才能启动程序。

而java -jar是通过Main-Class来找到Test类并执行其中的main(),输出Hello World!如果你的MANIFEST.MF文件中没有Main-Class,就会提示Cant load main-class的错误。所以在导出jar包或者使用maven打包插件的的时候一定要指定main-class。

如图:

这样导出的时候,MF文件中就会有了入口类的信息。

java -cp

对于java -cp就不需要指定Main-Class来指定入口。因为在启动时,第一个参数就指定了你的入口类,第二个参数就是你的jar包。它会根据你的jar包找到第一个参数指定的Test类,来输出HelloWorld。

区别

假设我们这个程序的运行,需要依赖一个叫Dep.jar的包。

如果我们使用-jar的话,需要把Dep.jar一同打包到Test.jar中,因为-jar只能指定一个jar包.

如果是使用-cp,我们可以选择将Dep.jar放到Test.jar中,也可以选择使用以下命令来运行:

java -cp com.test.Test Test.jar:Dep.jar 复制代码

cp其实就是classpath,在linux中多个jar包用 : 分割,代表了程序运行需要的所有jar包。

这样就可以不用将所有依赖都一起打包到Test.jar下。这样做的好处就是,假如修改了Test类,只上传修改后的Test.jar到服务器即可,不需要再将所有依赖再打包到Test.jar中再上传一遍,节约了时间。


作者:叫我阿柒啊
链接:https://juejin.cn/post/7028861376353271816


文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐