Zookeeper學習2:Java編寫訪問的客戶端 錯誤: 找不到或無法加載主類


代碼按《ZooKeeper分布式過程協同技術詳解》中編寫:

需要先設置CLASSPATH ,可以在~/.bashrc 或者~/.bash_profile 中:添加:

export ZOOBINDIR=${ZOOKEEPER_HOME}/bin,ZOOKEEPER_HOME就是zookeeper的包位置

然后運行:. zkEnv.sh

      echo $CLASSPATH 看看變化

package zkWatcher;

import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;

import java.io.IOException;
import java.util.Random;

public class Master implements Watcher{

    ZooKeeper zk;
    String hostPort;
    
    Master(String hostPort){
        this.hostPort = hostPort;
    }
    
    void startZK() throws IOException {
        zk = new ZooKeeper(hostPort,15000,this);
        try {
            runForMaster();
        } catch (KeeperException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    void closeZK() throws InterruptedException {
        zk.close();
    }
    
    void runForMaster() throws KeeperException, InterruptedException {
        Random rand = new Random();
        String serverId = Integer.toHexString(rand.nextInt()) ;
        zk.create("/master", serverId.getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL );
    }
    
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Master m = new Master(args[0]);
        
        m.startZK();
        
        System.out.println("load");
        Thread.sleep(10000);
        //m.closeZK();
    }

    @Override
    public void process(WatchedEvent event) {
        // TODO Auto-generated method stub
        System.out.println(event);
    }
}

編譯的時候在zkWatcher 目錄下面:javac -cp $CLASSPATH Master.java 

可以正常生成Master.class 文件

運行:javac -cp $CLASSPATH Master 127.0.0.1:2181

時會報:錯誤: 找不到或無法加載主類 Master

這個時候因為 Master.java帶了包名,回退到上一級目錄就可以通過了

java -cp $CLASSPATH zkWatcher/Master 127.0.0.1:2181

 


免責聲明!

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



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