本文介紹了啟動(dòng)應(yīng)用程序時(shí)排除類路徑中的類或包的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我在一個(gè)文件夾中有多個(gè)*.jar
文件,它們都包含在類路徑中,以便在Microsoft Windows OS中啟動(dòng)指定的主類。目前這是這樣完成的:
@echo off
java -Xmx1024M -cp libs/*;. org.test.Main
現(xiàn)在我遇到了問題,在libs
文件夾中有兩個(gè)JAR文件,它們都有一個(gè)相同的包org.test.configuration
。兩者是不同的,當(dāng)我現(xiàn)在啟動(dòng)程序時(shí),我收到錯(cuò)誤,因?yàn)镴ava VM選擇了錯(cuò)誤的程序。
如何在我的啟動(dòng)腳本中排除一個(gè)特殊包或一個(gè)特殊類?(當(dāng)然,我可以從錯(cuò)誤的JAR中刪除此包,但我不想使用此方法…)
推薦答案
按順序在類路徑中搜索包/類。不使用通配符…
java -Xmx1024M -cp libs/*;. org.test.Main
.按照所需的順序?qū)懗鲱惵窂剑紫仁前?#8221;正確的”org.test.configuration
包的JAR。
java -Xmx1024M -cp libs/test-config.jar;libs/other.jar;libs/etc.jar;. org.test.Main
編輯
您可能仍然可以使用通配符,只需首先顯式列出所需的JAR,并讓它在類路徑中復(fù)制:
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*
會(huì)導(dǎo)致首先包含config1.jar,并返回一個(gè)活動(dòng)的Config
對(duì)象。使用libsconfig2.jar;libs*
會(huì)導(dǎo)致首先包含來自config2.jar的Config
,并返回null
。
這篇關(guān)于啟動(dòng)應(yīng)用程序時(shí)排除類路徑中的類或包的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,