Java中如何更換jar包中的.class文件並重新打包


Java中如何更換jar包中的.class文件並重新打包

 現實Java Web開發中,需要引入不少jar包,從而使用其中封裝好的對象或方法。

 但是需要注意jar包的版本是否與當前jdk的版本兼容,否則將會引起項目啟動異常,異常代碼如下所示。

 錯誤代碼eg: Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher

復制代碼
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [beans.xml]; nested exception is java.lang.IllegalStateException: Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:420)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
復制代碼

如何解決這個問題?

一、降低JDK版本,將jdk1.8換成jdk1.7

   在本機安裝jdk1.7,然后在項目的java build path中選擇jdk1.7,因為該jar包版本出來的時候,jdk最新版本可能才1.7,所以選擇jdk1.7的版本(嘗試了這種方法,並沒有效果,原因未知.......)。

二、更換jar包中.class文件,使其兼容jdk1.8

  具體步驟:

  1.在eclipse中新建一個java類。

     內容如下:

復制代碼
package org.springframework.core;

public abstract class JdkVersion {
    public static final int JAVA_13 = 0;
    public static final int JAVA_14 = 1;
    public static final int JAVA_15 = 2;
    public static final int JAVA_16 = 3;
    public static final int JAVA_17 = 4;
    //for jre 1.8
    public static final int JAVA_18 = 5;
    private static final String javaVersion = System
            .getProperty("java.version");
    private static final int majorJavaVersion;
    public static String getJavaVersion() {
        return javaVersion;
    }
    public static int getMajorJavaVersion() {
        return majorJavaVersion;
    }
    public static boolean isAtLeastJava14() {
        return true;
    }
    public static boolean isAtLeastJava15() {
        return getMajorJavaVersion() >= 2;
    }
    public static boolean isAtLeastJava16() {
        return getMajorJavaVersion() >= 3;
    }
    static {
        //for jre 1.8
        if (javaVersion.indexOf("1.8.") != -1) {
            majorJavaVersion = 5;
        }else if (javaVersion.indexOf("1.7.") != -1) {
            majorJavaVersion = 4;
        } else if (javaVersion.indexOf("1.6.") != -1) {
            majorJavaVersion = 3;
        } else if (javaVersion.indexOf("1.5.") != -1) {
            majorJavaVersion = 2;
        } else {
            majorJavaVersion = 1;
        }
    }
}
復制代碼

   2.生成該java類的.class文件。

     在命令提示框中定位到java類,然后輸入指令:javac UserAction.java(UserAction為類名)

     

   3.修改jar包中的.class文件。

      使用解壓工具打開jar包,便可以看到其中的.class文件,然后將剛剛生成的.class文件(UserAction.class),覆蓋原來jar包中的UserAction.class文件。(提前做好備份哦~~)

   4.重新打包生成jar包。

     **先用壓縮工具壓縮文件夾,然后再修改壓縮文件后綴為.jar,此方法無效!!!

     應該使用命令提示框,定位到需要打包的文件夾。

     例如,需要打包spring這個文件夾,先定位到該文件夾,然后輸入指令:jar cvfm spring.jar spring\META-INF\MANIFEST.MF -C spring/ . 

     META-INF\MANIFEST.MF文件必須存在!

     

  5.覆蓋原來的jar包。

     在eclipse  java build path中重新添加該jar包。

     

     已上,就已經完成了對jar包中.class文件的替換,並重新打包生成jar包,本方法親測可用~~~

     

     此外,還需注意的是,啟動tomcat時,需在Server Locations中配置tomcat安裝路徑,否則在瀏覽器中打開項目時會報404。

     

浮躁的人容易問:我到底該學什么;----別問,學就對了; 浮躁的人容易問:JS有錢途嗎;----建議你去搶銀行; 浮躁的人容易說:我要中文版!我英文不行!----不行?學呀! 浮躁的人分兩種:只觀望而不學的人;只學而不堅持的人; 浮躁的人永遠不是一個高手。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM