簡體   English   中英

控制CLASSPATH中Java類的加載

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM