Java类文件的运行时导致错误

问题描述

如果您不知道开发人员使用的特定软件包,如何编译和运行Java文件...

我有一个别人写的Java文件文件夹,并且我试图编译和运行Java文件,我可以通过运行javac * .java来编译文件,但是如果我尝试通过以下方式运行主类,调用java MainClass时,出现如下错误:找不到或加载主类MainClass,错误原因:java.lang.NoClassDefFoundError:SomePackageName / MainClass(错误名称:MainClass)

我不知道开发者定义的SomePackageName是什么,我对此无能为力。

所以问题是,如果我只知道哪个是主类,该如何编译和运行java文件

解决方法

  1. 完全合格的类名称的格式为:com.foo.Bar,其中com.foo是包(例如,定义Bar类的文件以package com.foo;行开头),而Bar是名称(例如,文件包含行public class Bar {)。
  2. 运行java并指定classpath + classname时,您将传递一个类名。不是文件名。因此,要运行此文件,您需要编写java -cp /path/to/base com.foo.Bar
  3. 完全限定的名称必须在运行时(类文件)和编译时(java文件)都与目录结构匹配。因此,在这里您应该说/Users/Foghunt/projects/myproj/src/com/foo/Bar.java,并且在编译后应该有例如/Users/Foghunt/projects/myproj/build/com/foo/Bar.class
  4. “基本目录”是包含第一个软件包目录的目录。因此,源文件的基本目录为/Users/Foghunt/projects/myproj/src,编译结果的目录为/Users/Foghunt/projects/myproj/build
  5. 基本目录必须位于类路径中。类路径条目是文件路径。因此,要运行此程序,您需要编写java -cp /Users/Foghunt/projects/myproj/build com.foo.Bar
  6. javac不介意是否没有正确定义事物的麻烦(例如,在javac *.java中运行/Users/Foghunt/projects/myproj/src/com/foo确实可行),但是如果您遇到麻烦,它会很快变得复杂有多个软件包。
  7. 通常,您应该使用构建系统。如果您继承了此项目,请在项目的根目录中检查名为build.xmlpom.xmlbuild.gradle的文件。如果存在,请使用网络搜索引擎(build.xml->搜索java antpom.xml-> java mavenbuild.gradle-> {{1} }),并用它来构建项目,请不要自己运行java gradle

你去了。有了这些知识,您现在就可以分析,构建和运行任何Java项目。