Java + jar文件

时间:2012-05-21 15:14:04

标签: java eclipse

我编写了一个快速的Java包装器,用于触发NMAP可执行文件并等待它完成。我正在使用Eclipse。我想包含NMAP源/可执行文件 在我的Java jar文件中,以便我有一个自包含的包。

在Eclipse中,我添加了NMAP文件夹层次结构。在Eclipse中,我可以看到Java正确地触发了NMAP实用程序,并在退出之前等待该实用程序结束 到现在为止还挺好。然后我导出了一个用于eclipse的JAR文件。我可以看到NMAP文件夹层次结构存在。但是,当我尝试运行JAR文件时,无法找到nmap.exe。可以使用jar文件调用外部可执行文件吗?如果没有,那是什么 我的选择?如果是这样,为什么它不能在jar文件中找到它在Eclipse中找到它?

感谢。

4 个答案:

答案 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上。