我编写了一个快速的Java包装器,用于触发NMAP可执行文件并等待它完成。我正在使用Eclipse。我想包含NMAP源/可执行文件 在我的Java jar文件中,以便我有一个自包含的包。
在Eclipse中,我添加了NMAP文件夹层次结构。在Eclipse中,我可以看到Java正确地触发了NMAP实用程序,并在退出之前等待该实用程序结束 到现在为止还挺好。然后我导出了一个用于eclipse的JAR文件。我可以看到NMAP文件夹层次结构存在。但是,当我尝试运行JAR文件时,无法找到nmap.exe。可以使用jar文件调用外部可执行文件吗?如果没有,那是什么 我的选择?如果是这样,为什么它不能在jar文件中找到它在Eclipse中找到它?
感谢。
答案 0 :(得分:1)
您需要将.exe及其所需的支持文件解压缩到磁盘上,然后才能将它们作为常规文件访问(我相信通过标准方法执行)。您可以在jar中的某个类文件上使用getResourceAsStream()
查找如何将资源从jar复制到文件的示例。
一旦解压缩,您就可以像现在一样执行(您可能需要根据您的操作系统确保执行权等)
答案 1 :(得分:1)
“执行本机程序”工具不了解如何在其他文件(如ZIP或JAR)中调用EXE文件。
如果要执行此操作,则必须将文件解压缩到文件系统位置并在那里调用它。由于Linux发行版(PowerPC?其他库版本等)的多样性,您可能应该要求用户安装它并调用它而不是自带。
答案 2 :(得分:1)
据我所知,您无法执行嵌入在jar文件中的可执行文件。
一种解决方案是将可执行文件嵌入jar文件中。然后使用getClass().getResourceAsStream("/path/to/executable")
检索字节并将它们输出到临时文件(File.createTempFile()
)。在UN * X系统上,在尝试执行之前,您必须chmod u+x file
。最后,您可以删除临时文件或创建文件一次并每次重复使用它并调用deleteOnExit()
。
当然,此解决方案意味着您拥有可在所有平台上运行的可执行文件。
您的解决方案可能适用于eclipse,因为您的“可执行”文件不在jar中。
答案 3 :(得分:0)
您可能还需要注意如何分发此内容,因为Nmap不能免费用于商业软件。
有一个Java的开源库可以调用Nmap,但它假定Nmap安装在运行代码的操作系统上。该API是Nmap4j,它位于sourceforge.net上。