• 可执行 jar | 到底如何执行


    dog
    │   pom.xml
    │
    └───src
        └───main
            └───java
                └───cn
                    └───zno
                            Dog.java
    bark
    │   pom.xml
    │
    └───src
        └───main
            └───java
                └───cn
                    └───zno
                            Main.java
    package cn.zno;
    
    public class Main {
    
        public static void main(String[] args) {
            Dog dog = new Dog();
            dog.bark(args[0]);
    
        }
    
    }
    package cn.zno;
    
    public class Dog {
    
        public void bark(String str) {
            System.out.println(str);
        }
    
    }

    dog.jar

    bark.jar

    F:>java -cp F:edog.jar;F:eark.jar; cn.zno.Main wang~wang~
    wang~wang~

    ps:When you use the -jar option, the specified JAR file is the source of all user classes, and other class path settings are ignored.

    意思是:如果用-jar命令执行可执行jar包,那么-cp 将失效

    目前采用:执行类的main函数的方式

    ps:Note that the -cp parameter must contain only JAR files;

    意思是:-cp 不能通过指定文件夹来发现jar,必须通过枚举全部的jar。window ; 分隔 linux : 分隔

    方式二:通过 

    JAR Manifest
    指定 Class-Path

    Manifest-Version: 1.0
    Main-Class: cn.zno.Main
    Class-Path: app-a-1.0.jar app-b-1.0.jar

    补充:具体如何使用 -cp 或 -classpath

    https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/intro.html

    -cp or -classpath
    Specifies a list of directories, JAR archives, and ZIP archives to search for class files. Class path entries are separated by semicolons (;) in Windows or colons (:) in Linux. Specifying -classpath or -cp overrides any setting of the CLASSPATH environment variable.

    1)方式一:通过设置 CLASSPATH 环境变量

    ① 设置系统环境变量

    ② 设置临时环境变量

    2)方式二:通过 -cp 或 -classpath 指定,此优先级高于环境变量

    非jar包测试

    1)默认从当前文件夹找类

    D:	est1>javac Test.java
    
    D:	est1>java Test
    Hello!

    2)如果没有环境变量也没有指定classpath 当前目录也没有类就会失败

    D:	est1>cd ../test2
    
    D:	est2>java Test
    错误: 找不到或无法加载主类 Test

    3)可以通过设置环境变量CLASSPATH=xxx(等号左右没空格)

    D:	est2>set CLASSPATH=D:	est1
    
    D:	est2>java Test
    Hello!

    4)可以覆盖或拼接CLASSPATH

    D:	est2>set CLASSPATH=D:	est2
    
    D:	est2>java Test
    错误: 找不到或无法加载主类 Test
    
    D:	est2>set CLASSPATH=%CLASSPATH%;D:	est1
    
    D:	est2>echo %CLASSPATH%
    D:	est2;D:	set1;D:	est1
    
    D:	est2>java Test
    Hello!

    5)-cp 或 -classpath 的优先级要高于环境变量

    D:	est2>java -cp D:	est1 Test
    Hello!
    
    D:	est2>echo %CLASSPATH%
    D:	est2
    
    D:	est2>set CLASSPATH=D:	est1
    
    D:	est2>java Test
    Hello!
    
    D:	est2>java -cp D:	est2 Test
    错误: 找不到或无法加载主类 Test

    jar包测试

    1)没有设置环境变量,没有使用-classpath,但是也不能从当前文件夹中的jar包中找到目标类

    D:	est>dir /B
    bark.jar
    dog.jar
    
    D:	est>java Test
    错误: 找不到或无法加载主类 Test

    2)jar 只能指定为具体的路径,如果有10个,那需要把10个全部设置到classpath里

    D:	est>java -cp D:	estark.jar;D:	estdog.jar Test
    Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name config/bark, locale zh_CN
            at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
            at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
            at java.util.ResourceBundle.getBundle(ResourceBundle.java:773)
            at Test.main(Test.java:8)

    注:

  • 相关阅读:
    [树形DP]Luogu P1131 [ZJOI2007]时态同步
    [状压DP]JZOJ 1303 骑士
    [DFS]JZOJ 1301 treecut
    [最小费用最大流]JZOJ 4802 探险计划
    [KMP][倍增求LCA]JZOJ 4669 弄提纲
    [DP]JZOJ 1758 过河
    列表生成式和生成器表达式
    协程函数
    生成器
    迭代器
  • 原文地址:https://www.cnblogs.com/zno2/p/5833455.html
Copyright © 2020-2023  润新知