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

时间:2015-04-01 01:18:30

标签: macos sockets tomcat ant

我在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,即使我没有在localhost上运行任何东西:8080。

我不确定为什么会这样,或者为什么它在Windows上工作。它曾经在Mac上工作......

我在OSX Yosemite版本10.10.2上测试

这与此有什么关系?我该如何解决?

3 个答案:

答案 0 :(得分:1)

第一个我要做的是通过编译和运行以下代码来模拟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");
    }
}

如果 在Tomcat未运行时输出up,那么javalsof之间在构成内容方面存在根本分歧#34; upness&#34;,以及需要调查的人。

查看实际是否的一种方法是尝试连接到它,例如:

telnet localhost 8080

如果连接起来,我通常会尝试lsof来查看已经获得的进程,但是,正如您所说,这似乎无法正常工作。它可能是一个不同的工具,如:

netstat -na | grep ':8080 '

会做到这一点。


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

您可能尝试的一件事是在构建过程中运行该Java代码,以便在ant告诉您服务器存在的同时查看它的想法。

答案 1 :(得分:1)

我发现了这个问题。

似乎ESET防病毒软件正在启动流程调用&#39; esets_proxy&#39;在localhost:8080,但这是有趣的事情,它通过lsofnetstat无法看到。奇怪的是,当我在8080开始野生蝇时,它变得可见。但是只有在野生动物跑步的时候,我把它关闭后才停止显示。我删除了ESET,并且ant socket任务停止显示正在使用的端口8080。

谢谢@paxdiablo,你的帮助非常有用!

答案 2 :(得分:0)

我在OS X上遇到了与卡巴斯基反病毒相同的问题,它在localhost 8080上启动了一个看不见的进程(没有netstat)。