2010-08-26 46 views
1

我是新来的,从命令行使用Java,我不明白。我读过以前的CLASSPATH问题,但仍然没有解决我的问题。CLASSPATH 101 ...(在Windows上)

我在C下面的类:\ TEMP \ A \ B \ C

package a.b.c; 

public class Hello 
{ 
     public static void main(String args[]) 
     { 
      System.out.println("Hello World!"); 
     } 
} 

包名称是故意的。 我编译它很好,我把里面的C中的Hello.class文件:\ TEMP \ A \目标

现在,在命令行,我去C:\ TEMP \并执行以下命令:

java -cp .\a\target a.b.c.Hello 

它抱怨说找不到类abcHello

在此先感谢!

+0

试试java命令一个/目标a.b.c.Hello – mhshams 2010-08-26 15:41:09

回答

3

和我把里面的C中的Hello.class文件:\ TEMP \ A \目标

这是不对的。它应该放在与.java文件相同的文件夹中。源代码本身被声明为package a.b.c;,所以.class文件应该保存在\a\b\c文件夹中。

然后执行它只是做:

C:\Temp>java -cp . a.b.c.Hello 
+0

我这样做是故意,因为我的工作在其他项目上不具备在同一文件夹作为源文件中的类文件。我想从这个简单的例子中学习更大的项目。 – user431336 2010-08-26 15:39:48

+0

然后,你需要更改代码的'package'声明匹配'a.target'。 – BalusC 2010-08-26 15:40:31

+0

嘛,不一定在同一* *文件夹,但在相同的文件夹结构。 – OscarRyz 2010-08-26 15:47:25

0

避免 “把” 的类文件的任何地方。下面应该工作:

javac -d c:\temp c:\temp\a\b\c\Hello.java 
# creates Hello.class in c:\temp\a\b\c 
java -cp c:\temp a.b.c.Hello 
+0

现在明白了......谢谢! – user431336 2010-08-26 15:51:52

0

Java将尝试从target开始搜索目录结构a\b\c,当你发现,它不会工作。

移动整个目录到target,你会没事的,就应该是这样的:

C:\Temp\a\target\a\b\c\Hello.class 

您可以使用-d选项编译它高大的编译器放置类文件。

许多项目结构都是这样的。

C:\whatever\projectname\src 
C:\whatever\projectname\classes 
C:\whatever\projectname\bin 
C:\whatever\projectname\lib 
C:\whatever\projectname\doc 

这样,你可以在你的项目目录,键入始终步骤:

javac -d classes src\*.java 

这将汇编在src目录中的所有资源,将它们放置在classes目录。

然后执行程序:

java -cp classes a.b.c.Hello 

您可以选择将地方需要的jar在lib

这工作非常细的小程序(< 10 SRC文件和2 - 3罐子库)。如果它生长除此之外,你很可能使用的IDE或蚂蚁

约以下这个项目结构的好处是,一些IDES(如IntellJ想法)只是接他们很容易,当你创建一个新项目。您选择“从现有来源创建项目”,然后您可以从那里继续。

我喜欢在命令行编译和编辑!

+0

这非常有帮助!谢谢! – user431336 2010-08-26 15:53:18

0

为了扩展BalusC的观点:类路径定义了一个“根”。当Java是找你的类,它将开始在类路径中每一根(或jar),向下钻取通过目录相匹配的包strucutre。您仍然需要让您在与其软件包名称匹配的目录结构中进行授课。在你的情况下,执行

java命令。\ A \目标abcHello

则可以将文件移动到

。\ A \目标\ A \ B \ C \ Hello.class

几年前,我也发现这个莫名其妙。

+0

现在明白了...谢谢! – user431336 2010-08-26 15:50:48