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 : 分隔
方式二:通過
JAR Manifest
指定 Class-Path
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yN1ADNxYjMyETMtMzNyEjM3AjMxITM5AjNxAjMtAzM5MTN38CX5AjNxAjMvwFMzkzM1czLcd2bsJ2Lc12bj5ycn9Gbi52YuUTMwIzcldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
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
| 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 or overrides any setting of the environment variable. |
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)
注:
轉載于:https://www.cnblogs.com/zno2/p/5833455.html