java -cp和java - jar的区别

java -cp

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

java -jar myClass.jar

执行该命令时,会用到目录META-INF\MANIFEST.MF文件,在该文件中,有一个叫Main-Class的参数,它说明了java -jar命令执行的类。

META-INF\MANIFEST.MF的内容

Manifest-Version: 1.0
Main-Class: test.core.Core

Maven 打包

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

    
        
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.1
                
                    1.8
                    1.8
                
            
            
                maven-assembly-plugin
                
                    
                        
                        test.core.Core
                        
                    
                    
                        jar-with-dependencies
                    
                
                
                
                    
                        make-assemble
                        package
                        
                            single
                        
                    
                
            
        
    
    
  • 下面基于pom和META-INF\MANIFEST.MF两个文件的配置,进行了三种情况的测试:

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

你可能感兴趣的:(maven,Java,java,maven)