如何从命令行生成 Java 文件的串行版本 UID?

Posted

技术标签:

【中文标题】如何从命令行生成 Java 文件的串行版本 UID?【英文标题】:How do I generate the serial version UID of a Java file from command line? 【发布时间】:2019-06-15 01:41:15 【问题描述】:

背景

我试图在 Eclipse 中生成我的 java 文件的 serialVersionUID,但得到Eclipse : Cannot generate a serial version ID 中描述的错误。我已按照该问题中的说明进行操作,但我没有丢失路径文件并且仍然遇到相同的错误。另外,我必须使用随机生成的serialVersionUID(尽管它通常是ok to use just 1L),因为这是我的项目的要求。

问题

由于我的 Eclipse 不合作,我正在尝试命令行解决方案。我找到的命令serialver 不会生成serialVersionUID。根据How to generate SerialVersionUIDserialver 应该在文件内生成一个serialVersionUID:

    serialver 命令

JDK 有一个名为“serialver”的内置命令来生成 serialVersionUID 自动。在此示例中,您使用“serialver” 为 Address 类生成一个 serialVersionUID。

 E:\workspace\target\classes>serialver Address Address:    static final
    long serialVersionUID = -687991492884005033L;

但是,我在类目录中的一个类上运行了这个命令,终端返回了这个错误:

Class Classname.java not found.

无论我在终端中输入serialver Classname 还是serialver Classname.java,都会出现此错误。我也在与文件相同的目录中运行它并且错误仍然存​​在。

问题

如何在 Linux 命令行中使用 serialver 来设置 Java 文件的 serialVersionUID?如果serialver 不是我应该使用的命令,那么哪个命令(或一系列命令)是正确的方法?

澄清

我希望从命令行在我的文件中生成并分配serialVerionUID,因此How to generate serialVersionUID programmatically in Java? 的编程方法不是我想要的。换句话说,我希望命令在我的文件顶部生成这段代码:

private static final long serialVersionUID = <some random long>;

【问题讨论】:

如何生成链接很有用,尤其是对于 Intellij IDEA 方法。以为我会为遇到此问题但不想使用命令行方法的其他人提及它。 【参考方案1】:

您可能需要为包含已编译类的目录指定-classpath(例如bin)。要引用一个类,你必须使用它的完全限定名,包括包——例如对于 arraylist 类

serialver -classpath bin java.util.ArrayList

【讨论】:

【参考方案2】:

需要在编译后的.class文件所在目录下运行serialver,并指定类名不带扩展名(Classname,而不是Classname.java)。

【讨论】:

以上是关于如何从命令行生成 Java 文件的串行版本 UID?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Intellij 中生成串行版本 UID

cmd运行java一个报错

是否有任何命令行工具可以从 db 生成 Java 实体类(不是 Netbeans 或 Eclipse 向导)

如何让 Xcode 8 从命令行自动生成配置文件?

如何从命令行构建 iOS App Store 发布文件?

java命令行从编译到打jar包到执行