java -cp与java -jar


java -cp与java -jar


java -cp(或java -classpath)

指定执行运行依赖jar和主类,需要绝对路径。指定多个jar时,linux用“:”分隔,windows“;”分隔。也可以用全称-classpath。支持通配符 “ * ”。java -cp classpath,-cp后面是类路径,解释器会到指定路径下查找class文件。
格式 java -cp .;myClass.jar packagename.mainclassname
例如
java -cp .;c:/classes/myClass.jar;d:/classes/*.jar packagename.mainclassname
java -cp D:\spark\spark-2.3.3\assembly\target\scala-2.11\jars\* org.apache.spark.deploy.master.Master
classpath中的jar文件可以使用通配符。
packagename.mainclassname为包含mian方法的完全限定类名,如果classpath中有多个具有main方法的类,通过-cp可以方便的选定程序的入口。
使用-jar选项,java.exe会忽略-cp、-classpath以及环境变量CLASSPATH的参数。

java -jar

指定运行的jar,会用到打包时的生成的META-INF下的MANIFEST.MF文件,其中Main-Class指定了主类。不能再指定其他依赖jar。ava -jar myClass.jar,执行该命令时,会用到目录META-INF\MANIFEST.MF文件,在该文件中,有一个叫Main-Class的参数,它说明了java -jar命令执行的类。
格式 java -jar myClass.jar
例如
java -jar myClass.jar
java -jar E:\workspace\idmapping\target\idmapping-1.0-SNAPSHOT.jar


指定main-class的两种方式

  1. Maven打包时在pom.xml的build中指定main-class
  2. 在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>packagename.mainclassname</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: packagename.mainclassname


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



参考

原文地址:https://www.cnblogs.com/hai-feng/p/12355235.html

时间: 2024-10-09 11:06:34

java -cp与java -jar的相关文章

java -cp 命令 java jar 命令和 hadoop jar 命令

-cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号";" java -cp .;myClass.jar packname.mainclassname   classpath中的jar文件能使用通配符,如果是多个jar文件,要一个一个地罗列出来,从某种意义上说jar文件也就是路径. 要指定各个JAR文件具体的存放路径,相同路径有多个可使用通配符 java -cp .;c:\classes\myClas

JAVA CP命令

java -cp .;c:\dir1\lib.jar Test -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号";" 分隔,linux上是分号":"分隔.不支持通配符,需要列出所有jar包,用一点"."代表当前路径. 虽然现在都有eclipse之类的IDE了,但有时候后会手工编译和运行一些程序,很多人包括多年开发经验的人都不知道怎么在命令行参 数运行类.有

关于Java -cp引用jar是否支持通配符

其实是支持的: JDK6支持java -cp后面跟通配符'*',试了一下发现还是需要注意: 错误方式(Wrong way): java  -cp /data/apps/lib/*.jar com.chinacache.Main 或者 java  -cp /data/apps/ilb/ com.chinacache.Main 正确方式(right way): java -cp /data/apps/ilb/* com.chinacache.Main 低版本JDK(小于JDK6) java -cp

java命令行引入jar包

编译: E:/>javac -cp e:/jdom.jar test1.java 执行: E:/>java -classpath e:/jdom.jar; test1

java类打包成jar文件&amp;&amp;jar包的引入

一.将类打包成jar文件 首先分别看下MainActivity.java和func.java的源代码 现在要将func.java打包成jar包,方法如下: a.右击func.java ->Export ->Java ->JAR file b.在Select the resources to export中选择要打包的类,这里注意,如果这个类有调用其他动态/静态库,不需要一起选择,只选择java文件.库文件随着jar一起放到新工程目录下即可引用.然后输入JAE名称和存放位置,点finish

【Java】Java程序打包成jar包在Linux上运行

当需要把在Windows上开发的Java程序用在Linux上运行时,就需要吧该Java程序打包成jar包上传到Linux上去运行. 1.Java程序用MyEclipse打包成可运行的jar包 (1)在MyEclipse中选中需要打包的项目,点击右键,选择:Export... 如下图所示: (2)然后在弹出的窗口中选择:Java-->Runnable JAR file,然后点击:Next,如下图所示: (3)然后选择需要打包的程序和保存的地方,然后点击:Finish,如下图所示: 这样Java程序

在XP系统下搭建maven环境出的问题 Unable to locate the Javac Compiler in: C:\Program Files\Java\jre6\..\lib\tools.jar

Build errors for spider; org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project spider: Compilation failureUnable to locate the Javac Co

java文件转成jar包再转成exe文件

[本文简介] 本文将介绍如何把一个跑在eclipse的java应用,导出成jar文件,再变成exe可执行文件. 下面以一个跑在MyEcplise上的GUI应用程序为例子,一步步转化成exe可执行文件. [具体步骤] 1.安装Fat jar(小应用可不用,直接导出普通jar包即可) 如果你在程序开发的时候用到了第三方提供的API或者其它附属资源,在你导出生成jar文件时你必须将第三方的文件一并导出,不然你的程序运行将达不到你想要的结果. 所以我们使用 Fat jar插件 来生成jar包: (1)F

Java,AWTUtilities,eclipse报编译错误:Access restriction: The type &#39;AWTUtilities&#39; is not API (restriction on required library &#39;C:\Program Files\Java\jre7\lib\rt.jar&#39;)

[场景]调用com.sun.awt.AWTUtilities时,eclipse提示编译错误: Access restriction: The type 'AWTUtilities' is not API (restriction on required library 'C:\Program Files\Java\jre7\lib\rt.jar') [分析]eclipse项目默认的jre版本较早. com.sun.awt.AWTUtilities是在JDK 6 update10中增加的. [解决