首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java + jar文件

Java + jar文件
EN

Stack Overflow用户
提问于 2012-05-21 23:14:04
回答 4查看 285关注 0票数 0

我已经编写了一个快速Java包装器,它启动NMAP可执行文件并等待它完成。我正在使用Eclipse。我希望在Java jar文件中包含NMAP源代码/可执行文件,这样我就有了一个自包含的包。

在Eclipse中,我添加了NMAP文件夹层次结构。在Eclipse中,我可以看到Java正确地触发了NMAP实用程序,并在退出之前等待该实用程序结束。

到现在为止还好。然后,我使用eclipse导出一个JAR文件。我可以看到NMAP文件夹层次结构。但是,当我尝试运行JAR文件时,它在查找nmap.exe时遇到了问题。可以使用jar文件从调用外部可执行文件吗?如果没有,我有什么选择?如果是这样,为什么它不能在jar文件中找到它,而它可以在Eclipse中找到它呢?

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-21 23:23:14

您需要将.exe及其所需的支持文件解压缩到磁盘上,然后才能将它们作为常规文件进行访问(我相信,这需要通过标准方法执行)。您可以查找有关如何在jar中的某个类文件上使用getResourceAsStream()将资源从jar复制到文件的示例。

解压缩后,您可以像现在一样执行(您可能需要根据您的操作系统来确保执行权限等)

票数 1
EN

Stack Overflow用户

发布于 2012-05-21 23:23:42

"execute native program“工具无法理解如何调用其他文件(如ZIP或JAR)中的EXE文件。

如果要执行此操作,必须将文件解压缩到文件系统位置并在那里调用它。由于Linux发行版的多样性(PowerPC?其他库版本等),您可能应该让用户安装它并调用它,而不是带上您自己的。

票数 1
EN

Stack Overflow用户

发布于 2012-05-21 23:23:50

据我所知,您不能执行嵌入到jar文件中的可执行文件。

一种解决方案是在jar文件中嵌入可执行文件。然后使用getClass().getResourceAsStream("/path/to/executable")检索字节并将其输出到临时文件(File.createTempFile())。在UN*X系统上,您必须在尝试执行之前执行chmod u+x file。最后,您可以删除临时文件或创建一次文件并每次重用它,然后调用deleteOnExit()

当然,此解决方案意味着您拥有可在所有平台上运行的可执行文件。

您的解决方案可能在eclipse中工作,因为您的“可执行”文件不在jar中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10687944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档