Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建两个可运行的jar,它们使用相同的库,但不使用两次_Java_Eclipse_Maven_Jar_Runnable - Fatal编程技术网

Java 创建两个可运行的jar,它们使用相同的库,但不使用两次

Java 创建两个可运行的jar,它们使用相同的库,但不使用两次,java,eclipse,maven,jar,runnable,Java,Eclipse,Maven,Jar,Runnable,我有以下问题: 我在Eclipse中有一个后端Java项目,其中有两个主要函数,我想让它们成为可运行的JAR。这两个JAR需要共享一些代码,所以我不能将它们放在单独的项目中。一个jar是cms,一个jar是android应用程序要连接的Web服务器 Java项目包含一个文件夹,其中包含使用CMS时创建的资源(图片、视频等)。我不希望它们包含在jar中,因为在使用jar时,它们需要作为同一目录中的文件夹进行访问 该项目使用了相当多的库,所有不同的jar。我希望我导出的2个jar使用与库相同的文件夹

我有以下问题:

我在Eclipse中有一个后端Java项目,其中有两个主要函数,我想让它们成为可运行的JAR。这两个JAR需要共享一些代码,所以我不能将它们放在单独的项目中。一个jar是cms,一个jar是android应用程序要连接的Web服务器

Java项目包含一个文件夹,其中包含使用CMS时创建的资源(图片、视频等)。我不希望它们包含在jar中,因为在使用jar时,它们需要作为同一目录中的文件夹进行访问

该项目使用了相当多的库,所有不同的jar。我希望我导出的2个jar使用与库相同的文件夹。但是,当我导出我需要的两个jar时,它们都有一个文件夹,其中包含相同的库,并且该文件夹的名称是我导出的jar,带有一个_lib-suffix。是否可以让我的两个JAR与库使用同一个文件夹

现在,我通过右键单击我的项目>导出>选中“在生成的JAR旁边的子文件夹中复制所需库”>Finish来使用Eclipse导出

提前感谢您的帮助


编辑:如果我只是临时删除assets文件夹并将其复制粘贴到我的jar旁边,它不会包含在jar中,并且仍然有效。这就留下了一个问题:如何让两个JAR使用相同的库?

创建一个驱动程序类,使用如下主方法:

public class Driver {
    public static void main (String[] args) {
        if (args[0].equalsIgnoreCase("optionForClass1")) {
            FirstClass.main(null);
        else {
            SecondClass.main(null);
        }
    }
}

要将参数传递到相应的主函数中,可以使用系统属性,这些属性是VM全局属性。使用
System.getProperty(“String”)
或其他工具访问它们。

好的,我解决了两个问题:

问题1:创建一个不包含资产文件夹的可执行jar文件

解决方案:将assets文件夹复制到jar目标文件夹,并从eclipse项目中临时删除jar文件夹。现在创建可执行jar。之后,您可以恢复项目中的文件夹

问题2:创建两个可执行jar文件,它们使用相同的依赖项,并且使用相同的libs文件夹

解决方案:通过右键单击my project>Export>check“在生成的jar旁边的子文件夹中复制所需库”>Finish,在eclipse中创建第一个jar文件。为Jar选择名称时,请选择希望libs文件夹具有的名称。如果我选择名称“project”,libs文件夹将是“project_libs”。 导出jar并根据需要重命名它。
现在创建第二个jar,其名称与创建第一个jar时的名称相同,在本例中为“project”。因此,如果我再次选择“project”作为名称,它将创建相同的文件夹“project_libs”,您的两个jar都可以使用它们。只需将第二个jar重命名为您想命名的名称即可

我真的不明白你的意思。为什么我需要将参数传递给我的主函数?这是否解决了我创建两个使用相同库文件夹的JAR的问题?是的,它解决了,因为您现在需要做的就是将驱动程序类定义为清单中的
主类
,并使用参数选择要执行的类OK,我明白您的意思了。我制作了一个jar文件,可以用于这两个应用程序。从windows资源管理器或mac finder执行jar文件时,如何将正确的参数传递给jar文件?有没有办法告诉jar文件,无论从何处运行,它总是必须使用该参数运行?如果参数不存在,它将抛出ArrayIndexOutOfBoundsException,您可以捕获该参数并根据自己的意愿处理它,在这种情况下,使用消息是合适的。