我的计算机上有一个脚本,它根据我键入的命令运行其他脚本。这些任务经常完成,通常只需要几个参数(比如更新 git 存储库)。这是使用 bash 脚本完成的,但我想增加更多的灵活性,所以我将其转换为 Java。
有一个单独的文件用于“注册”这些命令。我使用以下语法:
name, alias1, alias2,... (one or more tabs) path.to.main.class
键入命令时,将搜索此文件以找到要加载的正确类路径。
name
是用于输出和查找适当 jar 的命令(以及 jar)的名称。然后它path.to.main.class
用于加载该类。因为那个类extends
是我创建的一个抽象类,所以我转换并调用了一个名为 的方法onCommandRun
,不言自明。
每个命令都被导出到一个 jar 中,尽管大多数命令只需要一个类文件即可运行。有一个命令需要三个类(虽然我可以将它们放在同一个类中,但我不喜欢内部类)。
我的问题是,该 jar 的主类加载正常,但是当我使用它需要运行的另外两个实用程序类之一时,我得到一个NoClassDefFoundError
/ClassNotFoundxception
而且据我了解,JVM 会在需要时加载它需要的类,那么为什么它在加载其他类时遇到问题呢?
额外:每个“命令 jar”都位于一个单独的文件夹中,而不是控制所有内容的主 jar。
额外#2:将每个命令分离到它自己的 jar 中的原因是因为控制一切的主 jar 只会运行一个命令,所以为什么要在只使用一个时注册所有命令(并加载)所有命令,以及然后程序退出?另外,我希望它是动态的。