可执行 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:\e\dog.jar;F:\e\bark.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 : 分隔
方式二:通过
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 |
1)方式一:通过设置 CLASSPATH 环境变量
① 设置系统环境变量
② 设置临时环境变量
2)方式二:通过 -cp 或 -classpath 指定,此优先级高于环境变量
非jar包测试
1)默认从当前文件夹找类
D:\test1>javac Test.java D:\test1>java Test Hello!
2)如果没有环境变量也没有指定classpath 当前目录也没有类就会失败
D:\test1>cd ../test2 D:\test2>java Test 错误: 找不到或无法加载主类 Test
3)可以通过设置环境变量CLASSPATH=xxx(等号左右没空格)
D:\test2>set CLASSPATH=D:\test1 D:\test2>java Test Hello!
4)可以覆盖或拼接CLASSPATH
D:\test2>set CLASSPATH=D:\test2 D:\test2>java Test 错误: 找不到或无法加载主类 Test D:\test2>set CLASSPATH=%CLASSPATH%;D:\test1 D:\test2>echo %CLASSPATH% D:\test2;D:\tset1;D:\test1 D:\test2>java Test Hello!
5)-cp 或 -classpath 的优先级要高于环境变量
D:\test2>java -cp D:\test1 Test Hello! D:\test2>echo %CLASSPATH% D:\test2 D:\test2>set CLASSPATH=D:\test1 D:\test2>java Test Hello! D:\test2>java -cp D:\test2 Test 错误: 找不到或无法加载主类 Test
jar包测试
1)没有设置环境变量,没有使用-classpath,但是也不能从当前文件夹中的jar包中找到目标类
D:\test>dir /B bark.jar dog.jar D:\test>java Test 错误: 找不到或无法加载主类 Test
2)jar 只能指定为具体的路径,如果有10个,那需要把10个全部设置到classpath里
D:\test>java -cp D:\test\bark.jar;D:\test\dog.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)
注: