本文介紹了啟動應用程序時排除類路徑中的類或包的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我在一個文件夾中有多個*.jar
文件,它們都包含在類路徑中,以便在Microsoft Windows OS中啟動指定的主類。目前這是這樣完成的:
@echo off
java -Xmx1024M -cp libs/*;. org.test.Main
現在我遇到了問題,在libs
文件夾中有兩個JAR文件,它們都有一個相同的包org.test.configuration
。兩者是不同的,當我現在啟動程序時,我收到錯誤,因為Java VM選擇了錯誤的程序。
如何在我的啟動腳本中排除一個特殊包或一個特殊類?(當然,我可以從錯誤的JAR中刪除此包,但我不想使用此方法…)
推薦答案
按順序在類路徑中搜索包/類。不使用通配符…
java -Xmx1024M -cp libs/*;. org.test.Main
.按照所需的順序寫出類路徑,首先是包含”正確的”org.test.configuration
包的JAR。
java -Xmx1024M -cp libs/test-config.jar;libs/other.jar;libs/etc.jar;. org.test.Main
編輯
您可能仍然可以使用通配符,只需首先顯式列出所需的JAR,并讓它在類路徑中復制:
java -Xmx1024M -cp libs/test-config.jar;libs/*;. org.test.Main
這里是Minimal, Complete, Verifiable Example:
org estMain.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);
}
}
org estfigationConfig.java(在config1.jar中):
package org.test.configuration;
public class Config {
public static Config getConfig() {
return new Config();
}
}
org estfigationConfig.java(在config2.jar中):
package org.test.configuration;
public class Config {
public static Config getConfig() {
return null;
}
}
Java-cp libs*;Org.est.Main
郵箱:org.est.configuration@1540e19dJava-cp libsfig2.jar;libs*;。Org.est.Main
空
在類路徑中僅使用libs*
會導致首先包含config1.jar,并返回一個活動的Config
對象。使用libsconfig2.jar;libs*
會導致首先包含來自config2.jar的Config
,并返回null
。
這篇關于啟動應用程序時排除類路徑中的類或包的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,