【发布时间】:2012-01-01 06:19:59
【问题描述】:
我正在为 Apache Tomcat 开发一个 Web 应用程序。 我正在使用一个名为 Location 的类,我在其中定义了一个名为 ipAddresses 的字段。这里是:
package com.maxmind.geoip;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
public class Location {
private final static double EARTH_DIAMETER = 2 * 6378.2;
private final static double PI = 3.14159265;
private final static double RAD_CONVERT = PI / 180;
public Set<String> ipAddresses;
public String countryCode;
public String countryName;
public String region;
public String city;
public String postalCode;
public float latitude;
public float longitude;
public int dma_code;
public int area_code;
public int metro_code;
public Location() {
ipAddresses = new HashSet<String>();
}
...
}
但是,在将 webapp 部署到服务器(war 文件)并尝试运行在其中使用此类的 servlet 之后,我得到了异常 java.lang.NoSuchFieldError for IP地址。
此外,在尝试调试它(Eclipse)时,当我到达调用 Location loc = new Location() 的地方时,会发生两件奇怪的事情:
- 未调用我编写的构造函数,调试器不会介入其中,而是在 Location.java 文件中的导入上显示程序计数器箭头。
- 从 Location loc = new Location() 调用“返回”后,当我查看对象的内容时,该字段实际上并不存在。
- 与 jar 文件一起部署的源文件确实包含此字段。
我尝试了很多东西:
- 清理和构建项目并重新部署它。
- 手动和使用 Eclipse 清理服务器的工作目录。
- 在 Eclipse 中更改服务器的工作目录。
- 在 Eclipse 中重新安装服务器。
- 完全重新安装 Tomcat,安装 3 次,安装到不同的位置!
我很困惑。会是什么?
【问题讨论】:
-
你能发布堆栈跟踪吗?
标签: eclipse jakarta-ee tomcat servlets eclipse-wtp