问题描述
我的Java正常工作,并且还为Java JDK 1.8.0_261设置了环境变量
但是当我运行pig -version
时,它显示Error: Could not find or load main class C:\java\lib\tools.jar
。
我还检查了lib中的Java文件夹中是否存在 tools.jar 。
此外,在Pig.cmd中,Apache Pig配置也是正确的
我的Hadoop和MapReduce都工作正常,没有错误。
解决方法
您的安装已损坏,或者您弄乱了Shell脚本。该错误实际上不能表示其他任何含义。
调用java.exe
时,可以通过java -jar C:\foo.jar
传递jar文件,也可以传递类路径+完全限定的类名:java -cp C:\foo.jar;C:\bar.jar com.foo.fullyqualified.ClassName
。
该错误表示您已经在该类名的位置传递了C:\java\lib\tools.jar
。这将无法在任何系统上运行,无论安装如何:C:\java\lib\tools.jar
是文件路径,而不是完全限定的类名。 tools.jar
在该位置的存在是无关紧要的:就像我告诉你的那样:“我在书架上搜索了标题为“ Can of Paint”的书,但我找不到它”,然后您说:奇怪,因为(指着车库架子上的油漆罐),这里有油漆罐。” Java并未将其视为查找路径;它将其作为要在类路径上搜索的类名称。
请注意,这个简单的调用:
java.exe C:\lib\tools.jar
产生您正在观察的确切错误,这是Java的正确行为(因为正确的运行方式是java -jar C:\lib\tools.jar
或更可能是java -cp C:\lib\tools.jar;. com.foo.YourApp
。解决方法是:..不调用这样的Java错误。
原因
-
也许pig.cmd损坏了。您粘贴的图像不包括对Java的实际调用。
-
也许是Java损坏了。
java.exe
完全有效吗?制作一些测试文件,进行编译,然后运行。这样行吗? -
也许脚本试图通过让Windows来启动jar(因此,双击它,或者在脚本
start foo.jar
中,脚本最终将检查HKLM注册表部分中的{ {1}},然后检查那里的密钥以了解如何启动它,如果您手动编辑了它,那将会破坏事情:然后,您可能将其设置为.jar
,它已被破坏了(必须为java %1
)。 -
java -jar %1
不会调用您认为会调用的pig.cmd,而是其他。 -
pig.cmd中的内容将启动另一个脚本。然后,该脚本被破坏,或者不是Pig.cmd认为是的脚本,等等。