[英]Controlling the loading of Java class in CLASSPATH
我正在嘗試使用類路徑方法來應用補丁,我的意思是我正在將修改后的類文件添加為jar文件,並且在加載類時會加載新版本的類。 因此,在不更改原始jar文件的情況下修補了應用程序。
以下類路徑定義可以正常工作;
java -cp patch/patch.jar;bin/ com.test.PatchClasspath
但是當lib類的順序更改時,它不起作用。(照常)
java -cp bin/;patch/patch.jar com.test.PatchClasspath
我想知道是否有一個JVM參數指示lib的加載順序?
編輯:我正在修改Util-> print()方法以驗證是否應用了補丁。
package com.test;
public class PatchClasspath {
public static void main(String[] args) {
Util util = new Util();
util.print();
}
}
package com.test;
public class Util {
public void print(){
System.out.println("Version-1");
}
}
謝謝。
沒有這樣的參數指示JVM中的lib加載順序(我相信),但是java -classpath選項本身將根據您放置的路徑確定類的加載順序。
JDK文檔對此進行了解釋: http : //docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/classpath.html
規格順序
指定多個類路徑條目的順序很重要。 Java解釋器將按照它們在類路徑變量中出現的順序在目錄中查找類。 在上面的示例中,Java解釋器將首先在目錄C:\\ java \\ MyClasses中查找所需的類。 只有在該目錄中找不到名稱正確的類時,解釋器才會在C:\\ java \\ OtherClasses目錄中查找。
嘗試-verbose:class
,它將向您顯示所有已加載的類,以什么順序加載它們以及從哪個jar加載它們。
要控制加載的類的順序,可以使用java -cp
修改類路徑中jar的順序。 我不認為有一種方法可以控制從特定jar加載的類的順序。
為了驗證是否已應用補丁,一種簡單/虛擬的解決方案是使用System.out.println("")
添加一個靜態字段。 例如:
static {
System.out.println("[DBG] : My Patch v1.0 is loaded.");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.