Java“无法找到或加载主类”带有类路径错误

在Java中使用-cp或-classpath标志进行编译时,我一直面临一个问题。 我会尝试解释下面的问题:

假设; 我有两个文件 - A.java和B.java。 A.java有一个简单的公共类,包含一个私有实例变量,一个get和一个set方法。 B.java是A的驱动程序方法。它实例化A; 为A的实例变量设置一些值,最后使用A中的get方法打印出该值。

我可以从命令行编译A.java和B.java。 如果两个编译的类文件都在同一个文件夹中; 以下运行良好:

java B

然而; 说我把A.class放在一个单独的文件夹中。 或者更好; 我创建了类文件A.class的JAR文件。 现在; 我应该能够正确说明classpath编译B.java。

编译工作。

javac -cp ..LibA.jar -d ..Bin B.java

它按预期将B.class文件放入Bin文件夹中。 现在; 如果我转到Bin文件夹并尝试执行以下操作;

java -cp ..LibA.jar B

我收到错误:

Error: Could not find or load main class B

现在; 过去几天我一直试图解决这个问题。 这是一个简单的用例来展示问题; 但实际上 - 我无法使用-classpath或-cp标志链接到现有的JAR库。 我可以从命令行运行我的Java程序的唯一方法是,如果我从JAR归档中将类文件从输出类中提取到相同的目录中。 那么,我不需要在执行命令中包含classpath标志。

但这是我不想要的。 我想让我的JAR存档与源代码的输出类文件分开。 我知道使用IDE; 这是我不需要担心的事情。 但我对命令行解决方案更感兴趣。 了解背后隐藏的内容。

我已经通过StackOverflow的所有其他建议 - 但似乎没有工作。 仅供参考,我在所有情况下都使用默认包装。 没有明确指定包装。

请帮忙。 提前致谢!

更新:我被要求以可读的格式提供我的目录结构,所以这里是:

$pwd
C:MyPathToJavaProgramsTop
$ls
Source
Bin
Lib
$cd Bin 
$ls
B.class
$ls ..Source
A.java
B.java
$ls ..Lib
A.jar
$jar tf ..LibA.jar
META-INF
META-INF/MANIFEST.MF
A.java
A.class

我希望清除它。 我使用Windows Powershell,因此子目录标有“”。 如果我在Unix终端上输入,它将会是“/”。 顺便说一下,我在Ubuntu 14.04上尝试了这一点,但没有成功。 我也用jdk 1.6测试了jdk 1.8 - 同样的错误。


尝试运行程序时错过了“类路径”。

有人错误地认为“-cp .. Lib A.jar”是在运行时期间包含A.class。 但事情是,“-cp”选项是设置类路径而不包括。 那样的话就是缺少类“B”的类路径。

因此,要从“Bin”文件夹运行程序,正确的命令(对于任何Windows系统)是:“java -cp。; .. Lib A.jar B”。 “。” 使所有的差异,指的是当前目录。

对于Linux,来自“Bin”文件夹的命令变为:“java -cp。:../ Lib / A.jar B”。

主要区别在于分隔符,“ ; ”是Windows,“ ”是Linux。


而不是以下内容:

java -cp .. Lib A.jar B

提供这个

java B -cp .. Lib A.jar

谢谢,

Aritra

链接地址: http://www.djcxy.com/p/80301.html

上一篇: Java "could not find or load main class" with classpath error

下一篇: Handling signals in different ways