我已经编写了一个快速Java包装器,它启动NMAP可执行文件并等待它完成。我正在使用Eclipse。我希望在Java jar文件中包含NMAP源代码/可执行文件,这样我就有了一个自包含的包。
在Eclipse中,我添加了NMAP文件夹层次结构。在Eclipse中,我可以看到Java正确地触发了NMAP实用程序,并在退出之前等待该实用程序结束。
到现在为止还好。然后,我使用eclipse导出一个JAR文件。我可以看到NMAP文件夹层次结构。但是,当我尝试运行JAR文件时,它在查找nmap.exe时遇到了问题。可以使用jar文件从调用外部可执行文件吗?如果没有,我有什么选择?如果是这样,为什么它不能在jar文件中找到它,而它可以在Eclipse中找到它呢?
谢谢。
发布于 2012-05-21 23:23:14
您需要将.exe及其所需的支持文件解压缩到磁盘上,然后才能将它们作为常规文件进行访问(我相信,这需要通过标准方法执行)。您可以查找有关如何在jar中的某个类文件上使用getResourceAsStream()将资源从jar复制到文件的示例。
解压缩后,您可以像现在一样执行(您可能需要根据您的操作系统来确保执行权限等)
发布于 2012-05-21 23:23:42
"execute native program“工具无法理解如何调用其他文件(如ZIP或JAR)中的EXE文件。
如果要执行此操作,必须将文件解压缩到文件系统位置并在那里调用它。由于Linux发行版的多样性(PowerPC?其他库版本等),您可能应该让用户安装它并调用它,而不是带上您自己的。
发布于 2012-05-21 23:23:50
据我所知,您不能执行嵌入到jar文件中的可执行文件。
一种解决方案是在jar文件中嵌入可执行文件。然后使用getClass().getResourceAsStream("/path/to/executable")检索字节并将其输出到临时文件(File.createTempFile())。在UN*X系统上,您必须在尝试执行之前执行chmod u+x file。最后,您可以删除临时文件或创建一次文件并每次重用它,然后调用deleteOnExit()。
当然,此解决方案意味着您拥有可在所有平台上运行的可执行文件。
您的解决方案可能在eclipse中工作,因为您的“可执行”文件不在jar中。
https://stackoverflow.com/questions/10687944
复制相似问题