我正在为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>(); } ... }
但是,在部署web应用程序服务器(war文件),并尝试运行在它使用这个类在servlet后,我发现了异常 java.lang.NoSuchFieldError的 为 ipAddresses 。
而且,当尝试调试它(Eclipse)时,当我到达一个调用 Location loc = new Location() 的地方时,发生了两件事:
我尝试了很多事情:
我很困。会是什么呢?
症状表明,你有com.maxmind.geoip.Location一些JAR类中JRE/lib或JRE/lib/ext将始终优先于类加载在WAR的类或任何其它Eclipse / Tomcat的独立的类路径的位置。
com.maxmind.geoip.Location
JRE/lib
JRE/lib/ext
loc.getClass().getProtectionDomain().getCodeSource().getLocation()在构造之后检查一下它应该提供有关 实际 从何处加载的见解。
loc.getClass().getProtectionDomain().getCodeSource().getLocation()