gpt4 book ai didi

java - 从命令行运行 java,文件夹结构和包名称不匹配

转载 作者:行者123 更新时间:2023-12-02 02:40:04 24 4
gpt4 key购买 nike

Java requires no correlation between package names and source code file structure. But most IDE's require sub-folder for each part of the package name.

以上说法属实吗?

为了尝试这个,我在 ~/Temp 文件夹中编写了一个简单的类。

package com.gnrcs.lab;

public class Main {
public static void main (String... args) {
System.out.println("Homo Sapiens");
}
}

然后从命令行,

~$ cd ~/Temp/
~$ javac Main.java // it does produce a Main.class file in ~/Temp
~$ java Main
Error: Could not find or load main class Main
~$ java com.gnrcs.lab.Main
Error: Could not find or load main class com.gnrcs.lab.Main
~$ java -cp . com.gnrcs.lab.Main
Error: Could not find or load main class com.gnrcs.lab.Main

我做错了什么?任何帮助表示赞赏。谢谢!

最佳答案

使用包的一个结果是类或接口(interface)的字节码必须出现在与其包名称匹配的目录结构中。如果您没有将字节码放入正确的目录结构中,编译器或 JVM 将无法找到您的类。编译后的字节码文件必须出现在文件系统上与包名称匹配的目录结构中。例如,.class com.gnrcs.lab 中任何类或接口(interface)的文件包必须出现在匹配 \com\gnrcs\lab\ 的目录结构中。您可以自己创建此目录结构或使用 -d在编译期间标记,编译器将为您创建必要的目录结构并将字节码放置在该目录中。

要运行该程序,您需要添加 -classpath执行时标记java 。示例:如果您位于 Temp 目录中,则可以使用 java -classpath .\ com.gnrcs.lab.Main .

简单来说,执行以下操作:

  1. javac -d .\ Main.java 。这将根据您的包名称创建目录并将字节码放置在该目录中。在你的情况下,~/Temp/com/gnrcs/lab/Main.class .

  2. java -classpath .\ com.gnrcs.lab.Main 。您必须在此处提供完全限定的名称。您还可以使用-cp标记为 -classpath 的快捷方式.

(注:针对linux机器即兴发挥)

关于java - 从命令行运行 java,文件夹结构和包名称不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45639377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com