【问题标题】:eclipse execute jar file run on linux machineeclipse 执行 jar 文件在 linux 机器上运行
【发布时间】:2013-11-25 04:22:39
【问题描述】:

我的主代码有两个类,主代码有两个引用

LookupService citylookup = new LookupService("D://GeoLiteCity.dat"...
FileReader fr =new FileReader("d:\\IP.txt");

我将它们导出到一个可执行的 jar 文件中,我得到 D://testIP.jarD://testIP_lib/reference libraries...jar

我运行 java -jar testIP.jar 并且它有效。

但是,我修改了对 linux 机器路径的引用,例如:/home/admin/GeoLiteCity.dat/home/admin/IP.txt 和移动textIP.jartestIP_libGeoLiteCity.dat IP.txt/home/admin/ 我再次运行java -jar testIP.jar 我收到错误

Exception in thread "main" java.lang.NoClassDefFoundError: com/maxmind/geoip/LookupService
    at testIP.CountryLookupTest.main(CountryLookupTest.java:18)

我检查它们是 java 1.7..version 我不知道我应该在哪里设置? 谢谢。

【问题讨论】:

    标签: java linux eclipse jar noclassdeffounderror


    【解决方案1】:

    听起来像是两个环境之间的类路径差异。检查两个环境中的CLASSPATH 环境变量,并检查jar 中MANIFEST.MF 文件中的Class-Path 条目。我怀疑 Eclipse 在 jar 内的 Manifest 文件中使用基于 Windows 的 Class-Path 条目构建了 jar。

    【讨论】:

    • 您可以使用任何 zip 文件查看器检查清单文件,例如 Linux 上的 Ark。它位于 jar 中的 META-INF 文件夹内。
    • 好点 - 在 Linux 上,您可以使用 unzip -p testIP.jar META-INF/MANIFEST.MF 转储清单文件。
    • 是的,我需要先检查类路径检查,感谢 robin 回答我的问题并改进我丑陋的页面。
    • @louis 这是一个团队的努力:Robin 格式化了你的问题,以便我可以阅读它,我回答了它,然后 Robin 格式化了我的答案。 :) 只是出于好奇,是 CLASSPATH 环境变量还是清单条目不正确?
    • 我再次检查了我的类路径,也许不需要在机器本身上设置类路径并将参考数据和 jar lib/ 放在同一位置,它可以工作。@matt forsythe 确保它是团队工作:)
    【解决方案2】:

    【讨论】:

    • 这应该不是必需的,因为可执行的 jar 文件应该包含它自己的 Class-Path(我猜)。
    • true,如果清单文件已正确更新并且依赖项 jar 包含在 jar 本身中
    • 依赖 jar 不需要在 jar 中。
    • true 这不是必需的,但您仍然希望将它们一起打包,以避免 jar 位于单独的文件路径上。我的意思是用户必须照顾依赖 jar 并确保它们被正确放置。除此之外,我认为最好先尝试一下并尝试了解哪些设置效果最好。
    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2020-02-11
    相关资源
    最近更新 更多