[英]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.