我正在为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 的异常 ipAddresses
此外,在尝试调试它(Eclipse)时,当我到达位置loc = new Location()的地方时,会发生两件奇怪的事情:
我尝试了很多东西:
我很困惑。它可能是什么?
答案 0 :(得分:3)
症状表明您在com.maxmind.geoip.Location
或JRE/lib
中的某些JAR中具有JRE/lib/ext
类,或者在任何其他与Eclipse / Tomcat无关的类路径位置中具有loc.getClass().getProtectionDomain().getCodeSource().getLocation()
类,该类始终优先于类加载WAR的课程。
在构建{{1}}之后对其进行检查时,应该可以深入了解实际的加载位置。
答案 1 :(得分:0)
你在使用这个领域吗?有什么参考吗? Eclipse完全有可能对其进行优化。
在Windows->Preferences->Java->Compiler
中,有一个设置:Preserve unused (never read) local variables
。这是检查?如果没有,请检查并重试。