• java -cp & java jar的区别


    java -cp

    java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库和jar包,需要全路径到jar包,多个jar包之间连接符:window上分号“;”.Linux下使用“:”。
    windows环境:

    java -cp .;d:workother.jar;d:workmy.jar packname.mainclassname 


    linux环境:

    java -cp .:/hone/myuser/work/other.jar:/hone/myuser/work/my.jar packname.mainclassname 

    表达式支持通配符,例如:

    java -cp .;c:workmy.jar;c:work*.jar packname.mainclassname 
    java -cp .:/home/myuser/work/lib/my.jar:/home/myuser/work/dependency_jars/*.jar packname.mainclassname 

    java -jar

    java -jar my.jar

    执行该命令时,会用到目录META-INFMANIFEST.MF文件,在该文件中,有一个叫Main-Class的参数,它说明了java -jar命令执行的类。
    java -jar方式不可以指定附加依赖jar包。

    备注:
    1.打包时指定了主类,可以直接用java -jar {xxx.jar}。
    2.打包时没有指定主类,可以用java -cp {xxx.jar} {主类名称(绝对路径)}。
    3.要引用其他的jar包,可以用java -{[classpath|cp]} {$CLASSPATH}:{xxxx.jar} {主类名称(绝对路径)}。其中 -classpath 指定需要引入的类。

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

    java -jar myClass.jar
    执行该命令时,会用到目录META-INFMANIFEST.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-INFMANIFEST.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-INFMANIFEST.MF(清单文件)的内容:
    Manifest-Version: 1.0
    Main-Class: test.core.Core

    1.pom中build指定mainClass 但是 META-INFMANIFEST.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-INFMANIFEST.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-INFMANIFEST.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 .;c:dir1lib.jar Test  
      
    -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”  
      
    分隔,linux上是分号“:”分隔。不支持通配符,需要列出所有jar包,用一点“.”代表当前路径。  
    虽然现在都有eclipse之类的IDE了,但有时候后会手工编译和运行一些程序,很多人包括多年开发经验的人都不知道怎么在命令行参  
    数运行类。有点杯具……  
    使用范例:  
    java -cp ..libhsqldb.jar org.hsqldb.Server -database mydb   
    或   
    java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 mydb   
  • 相关阅读:
    CentOS搭建LAMP环境
    CentOS下为Apache部署Symantec SSL证书并实现强制https访问
    [Raspi]树莓派4B装机使用上手指南
    [FPGA]Verilog利用PWM调制完成RGB三色彩虹呼吸灯
    [FPGA]浅谈LCD1602字符型液晶显示器(Verilog)
    [FPGA]Verilog实现JK触发器组成的8421BCD码十进制计数器
    [FPGA]Verilog实现可自定义的倒计时器(24秒为例)
    [FPGA]Verilog实现8位串并转换器HC595
    [FPGA]Verilog实现寄存器LS374
    STM32F407之USART
  • 原文地址:https://www.cnblogs.com/klb561/p/10513575.html
Copyright © 2020-2023  润新知