Ant 套接字任务无法在 mac 上运行

Ant socket task not working on mac

我在 build.xml

上得到了以下信息
<target name="check-port" description="Check whether Tomcat is running">
    <condition property="tomcat.running">
        <socket server="localhost" port="8080"/> 
    </condition>
</target>

它突然在 mac 上停止工作,在 windows 上工作正常,但在 mac 上它显示为 true,即使我在 运行 上什么也没得到22=].

我不确定为什么会发生这种情况或为什么它在 windows 上起作用。它曾经在 mac...

上工作

我正在 OSX Yosemite 版本 10.10.2

上进行测试

这可能与什么有关?我该如何解决?

我要做的第一个事情是通过编译和运行ning以下代码来模拟ant条件代码的行为:

import java.net.Socket;
import java.io.IOException;
public class Test {
    public static void main(String args[]) {
        try {
            Socket socket = new Socket("localhost", 8080);
        } catch (IOException e) {
            System.out.println("down");
            System.exit(0);
        }
        System.out.println("up");
    }
}

如果 that 在 Tomcat 不是 运行ning 时输出 up 那么你在 javalsof 什么构成 "upness",还有一个需要调查。

查看是否确实存在 的一种方法是 试图连接到它的东西,例如:

telnet localhost 8080

如果连接正常,我通常会尝试 lsof 看看是哪个进程获得了它,但正如您所说,这似乎不起作用。可能是其他工具,例如:

netstat -na | grep ':8080 '

会成功的。


如果它输出 down 那么你有一个不同的问题,可能是 ant 中的一些问题,或者可能是你的构建过程本身启动了服务器(或不同的服务器)。这将 需要进一步调查,但你至少已经缩小了问题的范围。

然后您可能会尝试的一件事是 运行 构建过程本身中的 Java 代码,以查看它在同一时间的想法 ant 告诉您服务器有吗

我发现了问题。

似乎 ESET 防病毒软件正在 localhost:8080 上启动一个进程调用 'esets_proxy',但有趣的是它在 lsofnetstat 上是不可见的。奇怪的是,当我在 8080 上启动野蝇时,它变得可见了。但只有当野蝇是 运行 时,我关闭它后它才会停止显示。我删除了 ESET,ant 套接字任务停止显示正在使用的端口 8080。

谢谢@paxdiablo,你的帮助真的很有用!

我 运行 在 OS X 上遇到与卡巴斯基反病毒软件相同的问题,它在本地主机 8080 上启动一个不可见的进程(没有 netstat)。