java - 尝试访问 .jar 文件中的内部静态枚举时出现编译错误
问题描述
我正在尝试访问 .jar 文件中的内部静态枚举状态,但出现编译错误,我不知道为什么。
消息.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
服务器.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 或类似的。
推荐阅读
- spring - Java rmi 多模块 docker
- c - C 问题 #3 - 学生列表的双链表
- logparser - Log Parser Studio:按月统计 500 个错误和非错误
- selenium - Selenium 无法单击被“覆盖”元素遮挡的元素
- powershell - foreach 具有多个变量 foreach($numberi Powershell
- c# - 在 MassTransit 中使用 TTL 调度 ActiveMQ 消息
- angular - 如何在 Angular 中从 HTTPClient 接收 Map 对象
- python - 使用 Locust 将数据输入到 UI 元素
- python - OpenCV 实时流非常慢,像素操作
- angular - Angular *ngIf 良好实践 (HTML / TS)