我在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上测试
这与此有什么关系?我该如何解决?
答案 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
,那么java
和lsof
之间在构成内容方面存在根本分歧#34; upness&#34;,以及需要调查的人。
查看实际是否的一种方法是尝试连接到它,例如:
telnet localhost 8080
如果连接起来,我通常会尝试lsof
来查看已经获得的进程,但是,正如您所说,这似乎无法正常工作。它可能是一个不同的工具,如:
netstat -na | grep ':8080 '
会做到这一点。
如果它输出down
,那么你有一个不同的问题,ant
中的某个问题,或者你的构建过程本身可能启动服务器(或不同的服务器)。那也需要进一步调查,但你至少已经把问题缩小了。
您可能尝试的一件事是在构建过程中运行该Java代码,以便在ant
告诉您服务器存在的同时查看它的想法。
答案 1 :(得分:1)
我发现了这个问题。
似乎ESET防病毒软件正在启动流程调用&#39; esets_proxy&#39;在localhost:8080,但这是有趣的事情,它通过lsof
或netstat
无法看到。奇怪的是,当我在8080开始野生蝇时,它变得可见。但是只有在野生动物跑步的时候,我把它关闭后才停止显示。我删除了ESET,并且ant socket任务停止显示正在使用的端口8080。
谢谢@paxdiablo,你的帮助非常有用!
答案 2 :(得分:0)
我在OS X上遇到了与卡巴斯基反病毒相同的问题,它在localhost 8080上启动了一个看不见的进程(没有netstat)。