如何使用bash脚本编译使用jar文件的多封装Java项目

时间:2019-05-18 19:49:37

标签: java bash jar javac

我正在为我的计算机网络课程开发一个项目。 其实我已经结束了,现在我需要编写一个脚本来编译它,这样老师就可以运行它

我是用Netbeans开发的,现在我正在努力通过命令行进行编译。

我有3个文件夹(程序包)

  1. client:客户端进程的类
  2. 服务器:服务器进程的类
  3. sharedClasses:对客户端和服务器均有用的类(例如User.java)

我也将Gson用作sharedClasses包中所需的jar文件

  • 例如在sharedClasses中,有一个名为Message的类,该类使用Gson转换为json字符串

我做了很多尝试来创建一个可以全部编译的脚本,但是每次我收到“ ClassNotFoundException”之类的信息时:理解类路径等的在线指南都非常糟糕。

有人可以告诉我如何编写脚本并解释为什么事情按原样进行吗?谢谢

1 个答案:

答案 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