[英]Could not find or load main java class jar on AWS EC2 Linux
[英]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.class
和run.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.MyServer
, MyServer.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.