java シリアライズ serialVersionUID

シリアライズしたファイルの読み込みに失敗

java.io.InvalidClassException: (クラス名); local class incompatible: stream classde
sc serialVersionUID = 8863601476261986964, local class serialVersionUID = -375203819810566

stream classdesc ファイルに保存された serialVersionUID
local class 実行プログラムのクラスの serialVersionUID


serialVersionUID の値を表示する Ant のタスク
http://www.oikaze.com/~tamada/Products/junk/

package com.oikaze.tama.ant.taskdefs;

import java.io.*;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.taskdefs.MatchingTask;

/**
 * static final long serialVersionUID を表示する Ant のタスク.
 * 
 * @author Haruaki TAMADA
 * @version $Revision$ $Date$
 */
public class ViewSerialVersionTask extends MatchingTask{
    private File baseDir;

    public ViewSerialVersionTask(){
    }

    public void setBasedir(File baseDir){
        this.baseDir = baseDir;
    }

    public void execute() throws BuildException{
        if(baseDir == null){
            baseDir = new File(".");
        }
        DirectoryScanner scanner = getDirectoryScanner(baseDir);
        String list[] = scanner.getIncludedFiles();

        for(int i = 0; i < list.length; i++){
            log(list[i], Project.MSG_DEBUG);
            printSerialVersionUID(list[i]);
        }
    }

    private void printSerialVersionUID(String target){
        File inFile = new File(baseDir, target);
        if(!target.endsWith(".class")){
            return;
        }
        try{
            String className = target.substring(0, target.length() - 6).replace('/', '.');
            className = className.replace('\\', '.');
            Class c = Class.forName(className);
            if(checkSerializable(c)){
                ObjectStreamClass osc = ObjectStreamClass.lookup(c);
                long serialVersionUID = osc.getSerialVersionUID();

                System.out.println(c.getName() + ":    static final long serialVersionUID = " + 
                                   serialVersionUID + "L;");
            }

        } catch(Exception e){
            throw new BuildException(e.getMessage());
        }
    }

    private boolean checkSerializable(Class c){
        Class[] interfaces = c.getInterfaces();
        for(int i = 0; i < interfaces.length; i++){
            if("java.io.Serializable".equals(interfaces[i].getName())){
                return true;
            }
        }
        return false;
    }
}