【问题标题】:Distributing Java Application and files分发 Java 应用程序和文件
【发布时间】:2013-10-07 00:05:12
【问题描述】:

我刚刚编写了一个与血液机器对话的 java 应用程序。它使用 OAuth 安全性和 XML 将其数据发布到 Web 服务器,并且该应用程序运行良好。

但现在我需要将它分发给拥有这些机器的客户。该程序位于 .jar 文件中,它还需要我的 project/dist 文件夹中的其他 .jar 文件。

在执行过程中,它使用了一些 .png 文件,这些文件在屏幕上显示为图标,用户可以点击等。

我想知道如何将所有这些(包括图像)包装在一起并通过安装程序分发它们,或者我可以使用 Web 服务器。

最好的方法是什么,我尝试复制 .jar 和 dist 文件夹(根据 netbeans 的说明),但是当我运行 java -jar myfile.jar 时,它会打印出我的文本来自 IOException 因为我没有包含 .png 文件。

PNG 文件的代码: 我正在使用这个:

try 
    {
        databaseimage = ImageIO.read(new File("image/database.png"));
        databaseDisconnectedImage = ImageIO.read(new  File("image/database_delete.png"));

    } 
    catch (IOException ioe)
    {
        System.out.println("Problem Creating Systray: "+ioe.getMessage()+" Current Working Directory is: "+System.getProperty("user.dir"));
    }

【问题讨论】:

  • PNG 加载的答案在于打开文件的方式。看看这个问题:stackoverflow.com/questions/403256/…
  • 显然我知道我可以包含图像文件夹。但我想分发这个应用程序。最好的方法是什么?
  • .png 文件属于你的 jar。您可以使用返回 URL 的 Class.getResource 方法访问它们,然后将该 URL 传递给 ImageIO.read(URL)。

标签: java


【解决方案1】:

您有多种选择,包括:

  • 构建在用户机器上安装相关文件的安装程序。您可以从头开始编写它,也可以使用商业或开源工具来创建安装程序。 (在多种操作系统类型上安装变得复杂......)

  • 重构您的应用程序,以便通过类路径而不是直接从文件系统获取所有资源(例如图像)。然后创建一个可执行的“Uber-JAR”,通过分解所有依赖的 JAR 和资源,将文件组装到一棵树中,并对树进行 JAR 处理。 (通过向清单中添加几个条目来使 JAR 可执行。)

  • 为应用程序创建一个 JNLP 启动器。这仅在最终用户能够访问托管应用程序文件的网站时才有效,但它巧妙地解决了更新应用程序的问题,并确保用户使用的是最新的 JVM。

哪个最好?每个替代方案都有优点和缺点,您需要找出最适合您的

【讨论】:

    【解决方案2】:

    重击的解决方案是使用 Maven 并创建一个可执行的 jar,a.k.a. 一个程序集,a.k.a. 一个 jar-with-dependencies。 jar 可以同时包含其依赖项和元数据以正确运行它。

    java -jar Client-1.0-SNAPSHOT-jar-with-dependencies.jar
    

    会工作的。我假设有一个使用 Ant 的类似解决方案,它是构建 Java 程序的另一种工具。

    更多手动操作:想一想 - 无论您使用什么命令(包括用于运行程序的类路径),请确保将其保存到脚本中。它需要的所有文件将其捆绑到一个 .zip 中并将其发送过来,并附上解压缩和 cd 到其中的说明。最终你只是在运行一堆文件,你只需要将它们发送过来并保留目录结构,这样你的脚本就可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多