我是AWS EC2的新手,我希望通过执行如下所示的MyServer脚本在EC2实例中运行java类MyServer:
#!/bin/sh
cd /home/ec2-user/
java MyServerMyServer.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脚本中使用不同的类名(即server.MyServer,MyServer.class )来解决这个问题,但它们都不起作用。
发布于 2022-09-13 10:35:18
从代码中删除package server;之后,它就可以工作了。包似乎是由java自动添加的。
发布于 2022-09-12 05:57:12
将shell脚本更改为如下所示:
#!/bin/sh
(cd /home/ec2-user/ && java MyServer)否则,当shell解释器到达java MyServer时,当前目录已更改回原来的当前目录。
发布于 2022-09-12 06:09:08
问题是,您有一个名为服务器的包,并且在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用于目标文件夹,可以省略。
https://stackoverflow.com/questions/73684760
复制相似问题