用package组织源文件时如何编译、运行(欢迎补充)
最简单的就是使用IDE,或是使用ant方法来编译运行。
有些地方不是很profession,这个算个玉吧,去网上找找相应的更多资料,进行对比,参考参考!
这里假设你的域名是www.yourcompany.com(参考ranchgirl意见作了点修改)
举个例子来说,如果你有两个目录,一个是d:\dev\src,一个是d:\dev\classes。
src下有个目录是com\yourcomapny\serial,下边有你的文件,比如一个是Client.java(包含Client类,该文件的路径就是d:\dev\src\com\yourcomapny\serial\Client.java),如下:
1 2 3 4 5 6 7 8
| package com.yourcompany.serial;
class Client
{
public static void main(String[] args)
{
System.out.println("Client Hello World!");
}
}
|
一个是Server.java(包含Server类,该文件的路径就是d:\dev\src\com\yourcomapny\serial\Server.java),
1 2 3 4 5 6 7 8 9 10 11
| package com.yourcompany.serial;
import com.yourcompany.util.DispDate;
class Server
{
public static void main(String[] args)
{
new Client();//Server和Client属于同一个包,所以不需要导入。
new DispDate().disp();//Server和DispDate不属于同一个包,要导入
System.out.println("Hello World!");
}
}
|
src下还有一个目录,util,路径就是d:\dev\src\com\yourcomapny\util,
其中有个文件委DispDate.java,用来显示当前时间。
1 2 3 4 5 6 7 8 9
| package com.yourcompany.util;
import java.util.Date;
public class DispDate
{
public void disp()
{
System.out.println(new Date());
}
}
|
这样三个java文件准备好之后,确信类路径,已经添加了【.;】。 然后在windows命令行中,到当前目录,也就是d:\dev\src,
在该目录下可以对Server.java进行编译,
1 class文件和java文件放在同一个目录下
javac com\yourcomapny\serial\Server.java
在src目录下,指定要编译的java文件的完整路径。不然找不到java文件。
这样就会发现Server中需要util包中的DispDate类。自动对其进行编译,
Client也自动得到编译。(编译时查找需要的类的过程可参考
inside java中的ch01和ch02)
这样,在util目录下就生成了DispDate.class,在serial目录下生成了Server.class和Client.class。
如果要运行Server,可以使用
java com.yourcompany.serial.Server
前边的serial代表Server所在的包。
2 class和java文件不放在同一个目录下
把java源文件和class文件放在同一个目录下毕竟不是好的组织方法,放在不同的目录下更好,比如,java文件放在src下,class放在classes下。这时候编译为找到正确的类路径,有两种方法,1:在类路径中添加和【d:\dev\classes】,类路径用【;】分隔。 第二种方法,javac有一个选项就是指定输出的class目录,
javac -d ..\classes com\yourcomapny\serial\Server.java
这样,就会把class文件放在classes目录下的相应包下,Client.class放在d:\dev\classes\com\yourcomapny\util下,Serial.java放在d:\dev\classes\com\yourcomapny\serial下。
运行的时候,就需要切换到classes目录下。如果在classpath中添加了classes的路径,就无需切换目录。使用同样的命令来运行
java com.yourcompany.serial.Server
3 ant 方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <project name="jdbc" basedir="." default="run">
<property name="src" location="src"/>
<property name="classes" location="classes"/>
<property name="src.serial" location="${src}/com/yourcomapny/serial"/>
<property name="src.util" location="${src}/com/yourcomapny/util"/>
<path id="classpath">
<pathelement path="classes"/>
</path>
<target name="init">
<mkdir dir="${classes}"/>
</target>
<target name="compile" depends="init">
<javac destdir="${classes}"
fork="false"
verbose="off"
debug="on"
source="1.5">
<classpath refid="classpath"/>
<src path="${src.serial}"/>
<src path="${src.util}"/>
</javac>
</target>
<target name="run" depends="compile">
<input message="请输入要运行的类名(包括包名)" addproperty="run.class"/>
<java fork="true" classname="${run.class}" classpathref="classpath">
</java>
<antcall target="clean"/>
</target>
<target name="clean">
<delete dir="${classes}"/>
</target>
</project>
|
关于ant可以用google,或是baidu搜索一下,以下是一篇:
http://www.java3z.com/cwbwebhome/article/article2/2764.html?id=1271
看完ant之后应该看看这个
http://www.oreilly.com.cn/news/ant15toppractices.php?c=java
ANT十五大最佳实践