2010-01-29 238 views
1

如何编译和运行以下程序:编译并运行该java程序

Test1.java:

package A; 

public class Test1 
{ 
    public int a = 1; 
} 

Test2.java:

package B; 

import A.*; 

public class Test2 
{ 
    public static void main(String [] args) 
    { 
     Test1 obj = new Test1(); 
     System.out.println(obj.a); 
    } 
} 

我是新来的包。 如果我编译使用javac *.java 并手动创建目录A,将Test1.class复制到它并手动创建目录B并将Test2.class复制到它,然后运行java B.Test2它的工作原理。我相信这不是正确的做法。请建议。

+0

一些人建议使用IDE,但我试图弄清楚在底层发生了什么。有人提到Ant/Maven。有什么不同?我知道如何制作作品。我想这些都是相似的。我应该从哪一个开始,Ant还是Maven? – gameover 2010-01-29 03:36:18

回答

2

你需要保持你的java文件在正确的目录结构:

A/Test1.java 
B/Test2.java 

这是通常足以只在主类中调用javac,因为所有的依赖将被自动处理。我说javac B/Test2.java后,它看起来像这样:

A/Test1.class 
A/Test1.java 
B/Test2.class 
B/Test2.java 

而且我可以java B.Test2运行程序。

如果仅仅在主类上运行javac还不够,那么您可能需要构建系统。

+0

+1感谢您的明确插图:) – gameover 2010-01-29 03:34:45

2

你应该让你的.java文件目录结构符合包结构

所以Test1.java应该在目录中的 所以Test2.java应在目录中乙

+0

感谢对象,它工作:)但现在我需要使用两次的javac!有没有办法发布一个单一的javac命令? – gameover 2010-01-29 03:17:52

+1

一旦你开始创建> 1类的应用,你最好使用类似ant或maven的东西来编译。 你也可以列出许多文件来编译,例如。 java A/*。java B/*。java 或者你可以编译Test2.java和Test1将被编译(如果还没有的话),因为它被Test2使用 – objects 2010-01-29 03:25:00

+0

“你最好使用类似ant或maven的东西做你的编译“。或者像Eclipse或Netbeans这样的IDE。他们也使编码本身更容易。 – Thilo 2010-01-29 03:27:03

0

编译器将创建目录去称为A和B并将.class文件放在它们中。

您不应该需要手动将类文件复制到它们的软件包目录中,如果您这样做,它可能不起作用。

2

编译方式没有问题,只是很麻烦,但肯定没有错。

也就是说,创建一个src目录来存储您的.java文件,使您的目录结构与您的类的包结构保持一致。在这种情况下,你将有src目录和里面,目录A和B.目录里面放Test1.java和B里面放Test2.java

然后:

javac B/Test2.java 

为什么Test2.java?因为它依赖于A,所以编译器足够聪明,可以首先编译A/Test1.java,然后编译B/Test2.java。此时你有一个内部的每一个.class文件和B

运行它

java B.Test2 
+0

+1感谢您的清晰插图:) – gameover 2010-01-29 03:35:06

0

这不是直接回答你的问题,但你可能要开始考虑使用一个IDE(别人建议蚂蚁)。如果你刚刚起步,我会推荐jcreator,如果你想要一些好的东西,我会推荐Eclipse。