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 //执行成功
java -cp与java -jar的区别的更多相关文章
- Java 运行 Jar 包中java -cp 与 java jar 的区别
java -cp java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库和jar包,需要全路径到jar包,多个jar包之间连接符:window上分号"; ...
- java -cp 命令 java jar 命令和 hadoop jar 命令
-cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;” java -cp .;myClass.jar pa ...
- java -cp & java jar的区别
java -cp java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库和jar包,需要全路径到jar包,多个jar包之间连接符:window上分号“;”.Lin ...
- java -jar 和 java -cp 区别
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/12022527.html Project Directory SRC MainTest.java pac ...
- java程序打包成jar
1. 建立文件夹:proj,在该文件夹下建立3个子文件夹:lib,src 2. 在lib文件夹中放置依赖的jar包 3. 在src中放置类文件:com.cnjava.demo.Main.java 4. ...
- java cp命令
java -cp .;c:\dir1\lib.jar Test -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,windo ...
- javac -cp java -cp
///////////////////////////////////////////////////////////////////////////////////// 编译java文件的命令都知道 ...
- linux下java命令行引用jar包
一般情况下: 如果java 文件和jar 包在同一目录 poi-3.0-alpha3-20061212.jar testTwo.java 编译: javac -cp poi-3.0-alpha3-2 ...
- java -cp 用法介绍
java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;” 分隔,linux上是分号“:”分隔.不支持通 ...
随机推荐
- CentOS7配置静态IP中NM_CONTROLLED不要设置为NO
这个是网络管理的,之前一直是把这个选项设置为NO,然后在CentOS其中,每次重启网络服务都会失败,后来把这个设为YES就可以了.
- tensorflow 分布式搭建
https://blog.csdn.net/qq_40652148/article/details/80467131 https://yq.aliyun.com/articles/602111 git ...
- Django Rest Framework API指南
Django Rest Framework API指南 Django Rest Framework 所有API如下: Request 请求 Response 响应 View 视图 Generic vi ...
- Linux_NetworkManager_RHEL7
目录 目录 前言 网卡命名 RHEL7 的网卡命名规则 在RHEL7中修改回RHEL6的网卡命名规则方法 RHEL7的Network管理工具nmcli指令 nmcli指令 设置主机名 临时修改Host ...
- Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox、TVertScrollBox、TFramedScrollBox、TFramedVertScrollBox
Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox.TVertScrollBox.TFramedScrollBox.TFramedVertScrollB ...
- mysql 批量删表
Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_name LIKE ...
- Spring MVC集成Swagger2.0
在集成Swagger之前,得先说说什么是Swagger,它是用来做什么的,然后再讲讲怎么集成,怎么使用,当然,在这之前,需要了解一下OpenAPI. OpenAPI OpenAPI 3.0规范定义了一 ...
- UnityEventSystem
能够处理各种UI事件: IPointerEnterHandler:当指针进入 void OnPointerEnter(PointerEventData eventData); IPointerExit ...
- 调用user32.dll显示其他窗口
/// 该函数设置由不同线程产生的窗口的显示状态 /// </summary> /// <param name="hWnd">窗口句柄</param& ...
- (转)Eclipse - CDT使用GDB调试C++的问题-无源文件命名(No source file named)
http://tech.ddvip.com/2014-09/1411618782213496.html Eclipse CDT调试C++, 使用的Unix的调试器GDB; 由于在Unix下, 文件的目 ...