zoukankan      html  css  js  c++  java
  • java -cp与java -jar的区别

    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  //执行成功

  • 相关阅读:
    LeetCode Merge Two Sorted Lists 归并排序
    LeetCode Add Binary 两个二进制数相加
    LeetCode Climbing Stairs 爬楼梯
    034 Search for a Range 搜索范围
    033 Search in Rotated Sorted Array 搜索旋转排序数组
    032 Longest Valid Parentheses 最长有效括号
    031 Next Permutation 下一个排列
    030 Substring with Concatenation of All Words 与所有单词相关联的字串
    029 Divide Two Integers 两数相除
    028 Implement strStr() 实现 strStr()
  • 原文地址:https://www.cnblogs.com/wqbin/p/11128596.html
Copyright © 2011-2022 走看看