将带有 Java 代码的多个文件夹转换为可运行的 jar 文件

Turn multiple folders with Java code into runnable jar file

我的机器上有一些 Java 代码是我从命令行 运行 得到的。我想从此代码创建一个 运行nable .jar 文件,以便我可以更轻松地分发我的应用程序。

代码在四个文件夹中,分别为 fol_afol_bfol_cfol_d。其中每一个都包含一个 /bin 子文件夹,其中包含 .class 个文件,其中两个(fol_afol_b)还包含一个 /lib 文件夹,其中包含一些.jar 代码需要的文件。

fol_d 包含 class 到 运行、Demo,它们位于名为 machineLearning 的包中。 class 的完整路径是

fol_d/bin/machineLearning/Demo 

我目前运行命令行的代码如下:

$ cd fol_d/bin
$ java -cp ".:../../fol_a/bin:../../fol_a/lib/*:../../fol_b/bin:../../fol_b/lib/*:../../fol_c/bin" machineLearning.Demo <param_1> <param_2> ... <param_5> 

其中 <param_1><param_5>DemoMain 方法的参数。

我想要的是创建一个 .jar 文件,其中包含成功执行 Demo 所需的所有代码,即 fol_a 到 [=18] 中的代码=].然后,我希望能够从命令行 运行 这个 .jar 文件,给它提供转到 Demo 中的 Main 方法的参数。像这样:

$ java -jar MyApplication.jar <param_1> ... <param_5>

这可能吗?我该怎么做?我一直试图在网上找到答案,但信息量让我感到困惑。

更新

对了!所以看来我需要做的就是这个:

是的,这是可能的。

  1. 使用"cp -R"将所有4个文件夹的bin目录复制到一个目录中...保留子目录结构。 (如果您不明白如何操作,请阅读 man cp。如果未安装,请安装手动条目。)

  2. 使用 jar 命令从统一目录创建 JAR 文件。


更新

创建 JAR 文件时,JAR 中的路径(即 JAR 文件索引中的路径)必须与相应的 classes 完全限定名称相匹配。

如果您要创建可执行 JAR,Main Class 属性必须指定完全限定的 class 名称。

如果您错误命名 JAR 文件条目,那么 java 将找不到 classes,或者它将拒绝加载它们,因为路径名和 classname 不t 匹配。

这些要求适用于所有 JAR,但从您的评论来看,您似乎忽略了这一点。

在您的评论中,您似乎在 Main Class 属性中使用了错误的 classname ...除非您在 fol_d.bin 中声明了 class包裹!


更新 2

这里有一个例子来说明我关于完全限定 classnames

的观点
package foo.bar;

public class Main {
   ...
}

简单的 class 名称是 Main完全合格 class名字是foo.bar.Main。如果将此 class 的“.class”文件放入 JAR,则 class 的 JAR 文件 中的路径名 必须是:

/foo/bar/Main.class

包名(foo.bar)映射到JAR文件索引中的目录路径;即“/foo/bar”。

如果 JAR 文件中的路径名不是那个,那么class加载程序将找不到它。