尝试访问 .jar 文件中的内部静态枚举时出现编译错误
Compilation error when try to access inner static enum in a .jar file
我正在尝试访问 .jar 文件中的内部静态枚举状态,但出现编译错误,我不知道为什么。
Message.java:
package com.sockets.protocol;
public class Message {
public static enum Status {
OK, ERROR, PARAMERROR, REQUEST;
}
private String operation;
public Message(String operation) {
this.operation = operation;
}
// more code here but irrelevant for this problem
}
正在编译和创建 .jar 文件:
javac -d . com/sockets/protocol/Message.java
jar -cvf Message.jar com/sockets/procotol/Message.class
Server.java
package com.sockets.server;
import com.sockets.protocol.Message;
public class Server implements Serializable {
private int port;
private Message message;
public Server(int port) {
this.port = port;
this.message = new Message("op-test")
System.out.println("test status: " + Message.Status.OK);
System.out.println("test operation: " + message.getOperation());
}
}
当我注释掉第一个 System.out.println 时程序运行正常。那么我该如何解决这个问题?
错误信息:
[xxx@xxxxxxx src]$ javac -cp .:../library/Message.jar -d . com/sockets/server/Main.java
./com/sockets/server/Server.java:31: error: cannot access Status
System.out.println("teste message: " + Message.Status.OK);
^
class file for com.sockets.protocol.Message$Status not found
1 error
您需要明确地将所有 类 放入 jar。
jar -cvf Message.jar Message.class Message$Status.class
您会注意到 'v' 选项告诉您将要放入 jar 中的内容,在您的情况下,未列出 Status 枚举。
枚举的名称是 Message$Status,但如果这是 Linux 或类似的名称,则美元符号需要转义为 $
。
我正在尝试访问 .jar 文件中的内部静态枚举状态,但出现编译错误,我不知道为什么。
Message.java:
package com.sockets.protocol;
public class Message {
public static enum Status {
OK, ERROR, PARAMERROR, REQUEST;
}
private String operation;
public Message(String operation) {
this.operation = operation;
}
// more code here but irrelevant for this problem
}
正在编译和创建 .jar 文件:
javac -d . com/sockets/protocol/Message.java
jar -cvf Message.jar com/sockets/procotol/Message.class
Server.java
package com.sockets.server;
import com.sockets.protocol.Message;
public class Server implements Serializable {
private int port;
private Message message;
public Server(int port) {
this.port = port;
this.message = new Message("op-test")
System.out.println("test status: " + Message.Status.OK);
System.out.println("test operation: " + message.getOperation());
}
}
当我注释掉第一个 System.out.println 时程序运行正常。那么我该如何解决这个问题?
错误信息:
[xxx@xxxxxxx src]$ javac -cp .:../library/Message.jar -d . com/sockets/server/Main.java
./com/sockets/server/Server.java:31: error: cannot access Status
System.out.println("teste message: " + Message.Status.OK);
^
class file for com.sockets.protocol.Message$Status not found
1 error
您需要明确地将所有 类 放入 jar。
jar -cvf Message.jar Message.class Message$Status.class
您会注意到 'v' 选项告诉您将要放入 jar 中的内容,在您的情况下,未列出 Status 枚举。
枚举的名称是 Message$Status,但如果这是 Linux 或类似的名称,则美元符号需要转义为 $
。