a)尝试从根文件夹编译(使用包名)javac
packageName.javaFileName.java b) 进入包内部,
直接编译。 javac javaFileName.java
a) 部分根本没有编译,说 classNotFound。
是的。 javac 要求您指定要编译的(第一个)源的文件系统路径。相反,您似乎已将 .java 添加到所需的完全限定类名称的末尾。可能你想从解压后的 jar 根目录编译,指定正确的路径:
javac [options] package/name/className.java
对于类 package.name.className。 (如果您指定适当的选项,您也可以从不同的工作目录编译,如下所述。)
b) 部分
开始编译但抛出一个错误,其中没有任何外部
库被识别。(获取->错误:找不到符号
使用外部库的代码/导入的地方)
如果您正在编译的类依赖于其他也需要编译的类,那么javac 可能会对它们提出类似的投诉。从根目录编译(如 (a) 所示),或通过 -sourcepath 选项指定源根目录的路径。无论哪种方式,都没有理由进入源代码树进行编译。
但外部库实际上是一个单独的问题,尽管是相关的。你不需要编译这些,但你需要告诉javac 将它们用作类的源。您可以通过-classpath 选项来实现,您可以将其缩写为-cp。如果这些被包装在罐子本身(即“胖罐子”)中,那么这应该相当容易,类似于以下内容:
javac -cp .:lib/dependency1.jar:lib/dependency2.jar package/name/className.java
“lib”部分可能会有所不同,分隔符肯定会因操作系统而异(在 Windows 上是 ;,而在 Mac / Linux / Solaris 上是 :,如图所示)。
如果外部库没有打包到主 jar 中,那么过程是相同的,但您可能会面临更大的挑战来找到所需的 jar。此外,如果您将其移动到另一台机器上,这样的 jar 可能无法运行。不过,您可能应该查看 META_INF/MANIFEST.MF,因为它应该包含所需的信息。