2016-07-27 71 views
1

我在文件夾內有多個*.jar文件,這些文件都包含在類路徑中,以便在Microsoft Windows OS中啓動指定的主類。這是目前實現這樣的:在啓動應用程序時排除類路徑中的類或包

@echo off 
java -Xmx1024M -cp libs/*;. org.test.Main 

現在我有問題,該libs文件夾內有兩個JAR文件,兩者有一個相同的封裝org.test.configuration。兩者都不相同,當我現在啓動程序時,我收到錯誤,因爲Java VM選擇了錯誤的錯誤。

如何在我的啓動腳本中排除一個特殊包或一個特殊類? (當然,我可以將這個軟件包從錯誤的jar中刪除,但我不想使用這種方法...)

回答

2

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

+0

我已經試過這個,但不幸的是沒有成功。我試圖把config.jar放在另一個之前,也是另一種方式。但它只是裝載了錯誤的jar文件。我當然檢查了config類在同一個包中的兩個jar文件中。而錯誤的是返回一個NULL對象,所以我可以測試是。當我啓動服務器時,我總是得到一個NullpointerException。如果java使用其他配置類,將會有一個完整的功能對象來處理。但是java只會加載錯誤的... – christopher2007

+0

我已經添加了[mcve],表明如果多個jar包含相同的不同實現,則更改Jpath在類路徑上的順序會影響JVM使用的jar /包包/類。必須有其他因素導致您的問題。 – AJNeufeld

+0

我發現我的問題:「真正的」配置JAR文件未包含在Maven的'pom.xml'中。生成的JAR文件都有配置類,但所有其他項目都包含錯誤的配置類作爲依賴關係。所以,儘管我在類路徑中引入了「真實」配置類,但仍然使用了錯誤的配置類。看起來,即使在構建jar文件之後,maven仍然關注pom.xml。因爲當我添加正確的依賴關係時,我們正在做你正在說的:)但是我仍然懷疑。那麼我對這個觀察是否正確? – christopher2007

相關問題