Java按順序搜索packages/classes的類路徑。代替使用通配符...
java -Xmx1024M -cp libs/*;. org.test.Main
...寫出所希望的順序進行類路徑,與第一含的「正確」 org.test.configuration
包的廣口瓶中。
java -Xmx1024M -cp libs/test-config.jar;libs/other.jar;libs/etc.jar;. org.test.Main
編輯
你也許能夠逃脫仍然使用通配符,由第一隻明確列出所需的罐子,讓它得到複製在classpath:
java -Xmx1024M -cp libs/test-config.jar;libs/*;. org.test.Main
這裏是一個Minimal, Complete, Verifiable Example:
有機\測試\ Main.java(在的main.jar):
package org.test;
import org.test.configuration.Config;
public class Main {
public static void main(String[] args) {
Config cfg = Config.getConfig();
System.out.println(cfg);
}
}
有機\測試\配置\ Config.java(在config1.jar):
package org.test.configuration;
public class Config {
public static Config getConfig() {
return new Config();
}
}
有機\測試\配置\ Config.java(在config2.jar):
package org.test.configuration;
public class Config {
public static Config getConfig() {
return null;
}
}
的java -cp庫\ * ;. org.test.Main
[email protected]
java -cp libs \ config2.jar; libs \ * ;. org.test.Main
空
在classpath中只使用libs\*
導致config1.jar被首次列入,並返回現場Config
對象。使用libs\config2.jar;libs\*
導致來自config2.jar的Config
被首先包括,並且返回null
。
我已經試過這個,但不幸的是沒有成功。我試圖把config.jar放在另一個之前,也是另一種方式。但它只是裝載了錯誤的jar文件。我當然檢查了config類在同一個包中的兩個jar文件中。而錯誤的是返回一個NULL對象,所以我可以測試是。當我啓動服務器時,我總是得到一個NullpointerException。如果java使用其他配置類,將會有一個完整的功能對象來處理。但是java只會加載錯誤的... – christopher2007
我已經添加了[mcve],表明如果多個jar包含相同的不同實現,則更改Jpath在類路徑上的順序會影響JVM使用的jar /包包/類。必須有其他因素導致您的問題。 – AJNeufeld
我發現我的問題:「真正的」配置JAR文件未包含在Maven的'pom.xml'中。生成的JAR文件都有配置類,但所有其他項目都包含錯誤的配置類作爲依賴關係。所以,儘管我在類路徑中引入了「真實」配置類,但仍然使用了錯誤的配置類。看起來,即使在構建jar文件之後,maven仍然關注pom.xml。因爲當我添加正確的依賴關係時,我們正在做你正在說的:)但是我仍然懷疑。那麼我對這個觀察是否正確? – christopher2007