【问题标题】:How to pack APIs into JARs如何将 API 打包到 JAR 中
【发布时间】:2014-02-24 01:58:56
【问题描述】:

我有一个返回 CPU 值的 GUI 程序,这需要外部 API。我已经制作了 JAR,但除非我在 netbeans IDE 中运行该程序,否则该程序不会返回 CPU。我的问题是如何将 API 打包到 JAR 文件中。

private class getCpu extends Thread {
        @Override
        public void run() {
            while(true) {
                try {
                Sigar sigar = new Sigar();
                Cpu cpu = new Cpu();
                CpuPerc perc = sigar.getCpuPerc();

                DecimalFormat df = new DecimalFormat("###.###");
                //df.format(100-(perc.getIdle()*100));
                cpuLabel.setText("CPU : "+df.format(100-(perc.getIdle()*100))+"%");

                try{Thread.sleep(1000);}catch(Exception e2){}
                }catch(SigarException e1){}
                catch(Exception e){}
            }
        }
    }

【问题讨论】:

  • 大概是在一些库 JAR 中定义和实现了 API。运行程序时需要确保 JAR 在类路径中。
  • @OliCharlesworth 请给我解释一下
  • 我想你想实现这个:stackoverflow.com/questions/2034180/…

标签: java api jar


【解决方案1】:

您的程序无法运行,因为当您从命令行运行程序时,classpath 中没有“external API”(并且您得到了ClassDefNotFoundException

要解决此问题,您可以执行以下操作之一:

  • external API jar 添加到类路径: java -cp externalAPI.jar -jar jourProgram.jar

  • 将所有必要的类打包到您的 jar 中。有一个很好的 maven plugin 它可以把你所有的依赖打包到一个 jar 文件中 - https://maven.apache.org/plugins/maven-assembly-plugin/

【讨论】:

  • 程序在我从命令行执行时打开,但它仍然不会返回 cpu,除非我在 NetBeans 中运行它。有什么想法吗?
  • 任何异常或错误信息?你能粘贴一个你用来从命令行启动程序的命令吗?
  • 没有任何错误。然后我 cd 到有 jar 的文件夹:java -jar GuiCpu.jar
  • 但是您没有将 外部 API 添加到您的类路径中,例如:-cp external.jar 没有错误,因为您可能“吞下了”异常。粘贴负责接收 cpu 负载的代码。
  • 好的,我添加了代码,但另一方面,代码在 netbeans 中运行良好,但是当我在 netbeans 中构建 jar 时,它在 netbeans 之外无法运行。 (它会打开,但不会得到 cpu 百分比)
【解决方案2】:

使用 sigar 的 API 时,您必须将 log4j.jar 和 sigar.jar 添加到您的类路径中。但是您还需要将 sigar-amd64-winnt.dll、sigar-x86-winnt.dll 和 sigar-x86-winnt.lib 添加到最终构建的最终文件夹中,否则 Sigar 将无法正常工作。

【讨论】:

    猜你喜欢
    • 2013-08-18
    • 2019-01-23
    • 2011-12-21
    • 2013-03-19
    • 2017-07-30
    • 2014-10-13
    • 1970-01-01
    • 2015-11-24
    • 2012-11-01
    相关资源
    最近更新 更多