阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

介绍java -cp & java -jar的区别

34次阅读
没有评论

共计 2041 个字符,预计需要花费 6 分钟才能阅读完成。

导读 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. 打包是没有指定主类,可以用 j ava -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 // 执行成功

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2041字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中