2012-05-21 63 views
0

我写了一个快速的Java包装器,它可以关闭NMAP可执行文件并等待它完成。我正在使用Eclipse。我想在我的Java jar文件中包含NMAP源代码/可执行文件 ,以便我拥有一个自包含的软件包。Java + jar文件

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

谢谢。

回答

1

您需要将.exe及其必需的支持文件提取到磁盘上,然后才能以普通文件的形式访问它们(我相信这是通过标准方法执行的)。您可以查看如何使用jar中的某个类文件使用getResourceAsStream()将资源从jar复制到文件的示例。

提取完毕,您可以执行是你现在正在做的(你可能需要确保执行权等根据您的操作系统)

1

“执行本地程序”工具不知道如何调用EXE - 其他文件(如ZIP或JAR)内的文件。

如果你想这样做,你必须将文件提取到文件系统位置并在那里调用它。由于Linux发行版的多样性(PowerPC?其他库版本等),您应该请求用户安装它并调用它,而不是自带。

1

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

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

当然,这个解决方案意味着你有可在所有平台上工作的可执行文件。

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

0

由于Nmap不适用于商业软件,您可能还必须小心如何分发此文件。

Java有一个开源库来调用Nmap,但它假定Nmap安装在您运行代码的操作系统上。该API是Nmap4j,它位于sourceforge.net上。