我正在为我的计算机网络课程开发一个项目。 其实我已经结束了,现在我需要编写一个脚本来编译它,这样老师就可以运行它
我是用Netbeans开发的,现在我正在努力通过命令行进行编译。
我有3个文件夹(程序包)
我也将Gson用作sharedClasses包中所需的jar文件
我做了很多尝试来创建一个可以全部编译的脚本,但是每次我收到“ ClassNotFoundException”之类的信息时:理解类路径等的在线指南都非常糟糕。
有人可以告诉我如何编写脚本并解释为什么事情按原样进行吗?谢谢
答案 0 :(得分:0)
路径变量是所有Unix和Windows操作系统中的概念。它们不是Java的发明,而是Java基于它们自己的类路径和模块路径概念。
路径变量的值只是一个包含文件位置列表的字符串,在Unix中用冒号(:
)分隔,在Windows中用分号(;
)分隔。
最常见的路径变量只是PATH
。 (我相信在Windows中,变量的规范名称为Path
,但环境变量在Windows中不区分大小写,因此在大多数情况下,可以将其称为PATH
。)
当您尝试在命令行上执行程序时,通过指定不包含目录组件的命令名称,操作系统将依次检查PATH
中的每个文件位置以及目录中的每个位置。 ,系统将在那里寻找匹配项。第一个匹配项是操作系统使用的匹配项。
Java为类路径借用了这一概念。在Java的早期,它是完全相同的:如果您的类路径为/home/giulio:/opt/libraries
,并且您正在寻找一个名为com.example.ConnectionFactory
的类,那么Java会寻找一个名为{{1}的编译文件。 }在/ home / giulio中,然后在/ opt / libraries中。
不久之后,允许类路径包含文件,这些文件是目录的压缩类存档。您的类路径可能包含com/example/ConnectionFactory.class
,在这种情况下,Java将首先在/ home / giulio中检查所请求的类,因为该目录是一个目录,如果失败,它将在/ opt /中寻找匹配的条目。库/foolib.jar存档文件。 (Zip文件也是可以接受的,实际上,.jar文件实际上只是具有一些特殊的Java特定条目的zip文件。)
因此,当您要告诉Java在某些位置查找库时,请在类路径中指定它们。
例如,在编译客户端代码时:
/home/giulio:/opt/libraries/foolib.jar
运行代码时:
projectroot=`dirname "$0"`
javac -classpath "$projectroot"/sharedClasses/classes \
-d "$projectroot"/client/classes \
"$projectroot"/client/src/*.java