介绍java -cp java -jar的区别

news/2024/7/5 8:59:52
java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”

java -cp & java jar格式

java -cp和-classpath一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”
格式:java -cp .;myClass.jar packname.mainclassname
表达式支持通配符,例如:

java -cp .;c:\classes01\myClass.jar;c:\classes02\*.jar packname.mainclassname
java -jar myClass.jar

执行该命令时,会用到目录META-INF\MANIFEST.MF文件,在该文件中,有一个叫Main-Class的参数,它说明了java -jar命令执行的类。

用maven导出的包中,如果没有在pom文件中将依赖包打进去,是没有依赖包。
1.打包时指定了主类,可以直接用java -jar xxx.jar。
2.打包是没有指定主类,可以用java -cp xxx.jar 主类名称(绝对路径)。
3.要引用其他的jar包,可以用java -classpath $CLASSPATH:xxxx.jar 主类名称(绝对路径)。其中 -classpath 指定需要引入的类。

下面基于pom和META-INF\MANIFEST.MF两个文件的配置,进行了三种情况的测试:
pom.xml的build配置:

<build>
<!--<finalName>test-1.0-SNAPSHOT</finalName>-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>test.core.Core</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<!--下面是为了使用 mvn package命令,如果不加则使用mvn assembly-->
<executions>
<execution>
<id>make-assemble</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

META-INF\MANIFEST.MF的内容:

Manifest-Version: 1.0
Main-Class: test.core.Core

1.pom中build指定mainClass 但是 META-INF\MANIFEST.MF文件中没有指定Main-Class: test.core.Core

java -jar test-jar-with-dependencies.jar //执行成功
java -cp test-jar-with-dependencies.jar test.core.Core //执行失败,提示jar中没有主清单属性

2.pom中build没有指定mainClass 但是 META-INF\MANIFEST.MF文件中指定了Main-Class: test.core.Core

java -jar test-jar-with-dependencies.jar //执行失败,提示jar中没有主清单属性
java -cp test-jar-with-dependencies.jar test.core.Core //执行成功

3.pom中build指定mainClass && META-INF\MANIFEST.MF文件中增加了Main-Class: test.core.Core

java -cp test-jar-with-dependencies.jar test.core.Core //执行成功
java -jar test-jar-with-dependencies.jar //执行成功

http://lihuaxi.xjx100.cn/news/284298.html

相关文章

关于Linux下编译C文件出现storge size of ‘act‘ isn‘t know和never include <bits/sigaction.h> directory:usr<signal

1.出现以下问题&#xff1a;这个是在使用struct sigaction act;中出现了问题 提示&#xff1a;可以看到提示我们说“不知道这个act的存储大小” &#xff0c;那就说明找不到&#xff0c;很有可能是缺少什么头文件&#xff1a; 网上提示我们加入头文件&#xff1a;#include<b…

【C语言刷题】交换两个变量(包含不创建临时变量)的解法

目录一.常规方法&#xff08;引入空瓶变量&#xff09;二.题目要求&#xff0c;不允许创建临时变量2.1 通过两数加法实现交换2.2 按位异或操作符实现交换题目&#xff1a;写代码实现两个变量的交换。&#xff08;不允许创建临时变量&#xff09;一.常规方法&#xff08;引入空瓶…

抵制996!Python之父发声背后,这个社区一呼百应!

「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑这一次&#xff0c;程序员们也终于见证了一次 Python 社区的强大能量&#xff01;3 月底&#xff0c;996.ICU 话题诞生后&#xff0c;目前已在 GitHub Trending 上总计获得了近 23 万个 Star&#xff0c;一度冲…

图像去噪的深度学习最新综述论文,36页pdf,Deep Learning on Image Denoising

图像去噪是学术工业关注的问题。最近广东深圳哈工大分院的研究人员撰写了最新图像去噪深度学习的综述论文&#xff0c;非常值得学习&#xff01;关注文章公众号对话框回复“paper29”获取本篇论文地址&#xff1a;https://arxiv.org/abs/1912.13171简介&#xff1a;深度学习技术…

关于组培的一些想法(求知解惑),多肉科普

本文抛砖引玉&#xff0c;根据自己这段时间的看帖学习&#xff0c;提出自己的一些想法&#xff0c;希望各位看官特别是专家的指正 何为组培 所谓组培就是无性繁殖&#xff0c;商家组培的是一种&#xff0c;叶插是其实也是一种&#xff0c;有人说是介于种子繁殖和克隆之间的一种…

Linux 中 rsync 备份数据使用实例

rsync工具用于将文件和目录从一个位置同步到另一个位置。同步的位置可以在本地服务器或远程服务器上。接下来教大家在Linux 中rsync备份数据使用实例 在Centos中使用下面命令安装rsync&#xff1a; [rootlocalhost ~]# yum -y install rsync 实例一&#xff1a;本机中的两个目…

C语言易错题--将一个整数转换为六进制打印

题目来源&#xff1a;牛客网编程入门训练--BC111 小乐乐与进制转换 输入描述&#xff1a; 输入一个正整数n (1 ≤ n ≤ 109) 输出描述&#xff1a; 输出一行&#xff0c;为正整数n表示为六进制的结果 解题思路&#xff1a;由十进制数字打印类比可得&#xff0c;需要得到一个十…

90后教授:回国是用数学计算出的“最优解”

曾经&#xff0c;有一个在美国“暴富”的机会摆在南京大学数学系教授宗润弘面前。当时&#xff0c;26岁的宗润弘还在美国普林斯顿高等研究院做研究员&#xff0c;他的成就和才华引起了美国华尔街一位高层人士的注意。对方许诺&#xff0c;如果他进入华尔街&#xff0c;可以直接…