簡體   English   中英

AWS EC2 java 運行錯誤:無法找到或加載主 class

[英]AWS EC2 java run error: Could not find or load main class

我是 AWS EC2 的新手,我想通過執行如下所示的run.sh腳本在 EC2 實例中運行 java class MyServer

#!/bin/sh
cd /home/ec2-user/
java MyServer

MyServer.java

package server;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.Random;

public class MyServer {
    public static void main(String[] args) throws IOException {
        String jokes[] = {"j1", "j2", "j3"};

        ServerSocket socket = new ServerSocket(9000);
        while(true){
            Socket s = socket.accept();
            PrintWriter print = new PrintWriter(s.getOutputStream(), true);
            String ip = (InetAddress.getLocalHost().getHostAddress());
            print.println(ip+jokes[(int)(Math.random()*(jokes.length-1))]);
            s.close();
            print.close();
        }
    }
}

我通過安裝編譯器yum install java-devel然后javac MyServer.java編譯了代碼

實例的當前工作目錄是/home/ec2-user ,我在這個文件夾中有MyServer.classrun.sh

當我在實例中執行sh run.sh時,我收到Error: Could not find or load main class MyServer Caused by: java.lang.NoClassDefFoundError: server/MyServer (wrong name: MyServer)

我試圖通過在 .sh 腳本中使用不同的 class 名稱來解決它,即server.MyServerMyServer.class但它們都不起作用。

將您的 shell 腳本更改為以下內容:

#!/bin/sh


(cd /home/ec2-user/ && java MyServer)

否則,當 shell 解釋器到達java MyServer時,當前目錄已更改回原始當前目錄。

問題是您有一個名為服務器的 package 並且您在 bash 腳本中忽略了它。 檢查/home/ec2-user/是否有文件夾服務器 如果編譯成功,那么它將擁有它。 接下來,用java server.MyClass修改您的腳本,而不進入服務器文件夾(包),您應該能夠成功執行它。

我已經能夠在我的本地系統上執行此代碼:

package server;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.Random;

public class MyServer {
    public static void main(String[] args) throws IOException {
        String jokes[] = {"j1", "j2", "j3"};

        System.out.println("Server Started!");

        ServerSocket socket = new ServerSocket(9000);
        while(true){
            Socket s = socket.accept();
            PrintWriter print = new PrintWriter(s.getOutputStream(), true);
            String ip = (InetAddress.getLocalHost().getHostAddress());
            print.println(ip+jokes[(int)(Math.random()*(jokes.length-1))]);
            s.close();
            print.close();
        }
    }
}

這是用於編譯和運行的 shell 代碼:

saad@saadsap:~/java_barebone$ javac server/* -d out/
saad@saadsap:~/java_barebone$ cd out/
saad@saadsap:~/java_barebone/out$ java server.MyServer 
Server Started!

注意:標志-d用於可以省略的目標文件夾。

移除package server; 從代碼來看,它有效。 似乎 package 是由 java 自動添加的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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