从命令行运行包中的java

Posted

技术标签:

【中文标题】从命令行运行包中的java【英文标题】:Running java in package from command line 【发布时间】:2013-10-26 08:02:54 【问题描述】:

我已阅读之前发布的问题。有些含糊不清,没有一个能解决我的问题,所以我不得不再次询问。

我有两个简单的类,

package One;
import One.Inner.MyFrame;
public class test

    public static void main(String args[])
    
        MyFrame f= new MyFrame();
    

另一个类是,

package One.Inner;
import java.awt.*;
import javax.swing.*;

public class MyFrame extends JFrame

    public MyFrame()
    
        setPreferredSize(new Dimension(400,560));
        setVisible(true);
    

我在 Windows cmd 的基本文件夹“basic”中。我编译使用

basic> javac *.java -d .

创建了一个文件夹和子文件夹。

cd One
basic\One> java test

这会产生大量错误。许多答案指向指定不起作用的完整路径。 我的课程在 One 中,因此使用 -cp 指定 One 也不起作用。

【问题讨论】:

只是为了添加一些关于这个问题的好东西:webucator.com/how-to/how-compile-packages-java.cfm 【参考方案1】:

你可以这样运行它:

java One.Test

...但来自 root 目录 (basic),不是来自 One 目录。您始终指定完全限定的类名。

哦,Java 中的包名应该是小写的,所以应该是oneone.inner,而不是OneOne.Inner。只是一个约定,但几乎每个人都遵循。

【讨论】:

必须从中完成的目录非常重要。我之前弄错了。TY....注意了。我的错误印象是只有 java 的内置包必须很小。 有没有办法从同一个目录运行它?例如,通过命令行选项指定工作目录?我为此搜索了很多,每个人都说“只上一个目录”,但在某些情况下真的很烦人。 哦,这里是:java -cp ../ one.Test。我确定我以前尝试过。 是 - 在 Java 应用程序启动器 javaman 文件中,它声明:“默认情况下,第一个不带选项的参数是要调用的类的名称。应使用完全限定的类名。"我认为他们应该将其更改为“必须使用完全限定的类名必须”!【参考方案2】:

如果目录是:

basic\One

从包的基目录运行java:

basic>java One.test or basic>One.test <optional arguments>

(理想情况下包是小写,类是大写):

basic>java one.Test

如果您收到“不存在”消息,则 java 命令无法找到您在类中引用的类。您可以使用 -cp 选项指向它们(“.”表示“此处”,您可以添加任意数量的位置,在 Windows 上用“;”分隔,在 Linux 上用“:”分隔)。

basic>java -cp . one.Test
or
basic>java -cp .;..\..\someJar.jar;c:\someDirectory\classesDirectory  one.Test

【讨论】:

带有 -cp 标志的示例很有帮助。 +1 谢谢,很有帮助。【参考方案3】:

在创建带有包的类时,如果您想从 cmd 运行它,您必须创建一个与包名称相同的目录,将 .class 放入其中,然后您可以轻松运行它,例如您创建了一个名为“ one" 并且这个类在包中名为 pack ,你必须运行这些命令

1 javac one.java 编译后创建一个名为 pack 的目录,然后运行此命令 2 java pack.one 注意: 所有这些都必须在当前工作目录中完成,我在这里选择了名称“one”作为文件名和主类名 我们都知道第一个命令中使用的第一个名称是文件名,第二个是主类名

【讨论】:

你应该使用格式来简化你的答案的理解。【参考方案4】:

这是因为如果您在 java 文件中声明 package,那么 JAVA 编译器会认为您的系统中具有相同的文件夹架构。 在您的情况下,Java 编译器寻找 One 作为一个包,然后是 test.class。,或者更具体地说,只需查看您的 .class 文件,您就可以看到它在寻找什么路径。请查看下面的图片(我的情况是我使用 Hello 和 Tester)

您可以在图像中看到路径是 Hello/Tester(我的案例示例),因此架构应该类似于 Hello->Tester。

如果你没有相同的架构并且想在编译时创建相同的架构,那么使用 javacp 命令。

【讨论】:

【参考方案5】:

下面这行 Haralan Dobrev 代​​码解决了这个问题。

java -cp ../ one.Test

【讨论】:

以上是关于从命令行运行包中的java的主要内容,如果未能解决你的问题,请参考以下文章

命令行运行java程序,引入的其他jar包时,解决方案

如何从命令行运行 WAR 中的类?

java怎么用cmd运行包中的类

是否可以在命令行/作为 web 服务中运行 java 应用程序

Maven:如何从命令行传递参数运行 .java 文件

从命令行运行时混合java和kotlin代码的ClassNotFoundException