【问题标题】:java.lang.NoSuchFieldError exception while the field is defined定义字段时出现 java.lang.NoSuchFieldError 异常
【发布时间】: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() 的地方时,会发生两件奇怪的事情:

  1. 未调用我编写的构造函数,调试器不会介入其中,而是在 Location.java 文件中的导入上显示程序计数器箭头。
  2. Location loc = new Location() 调用“返回”后,当我查看对象的内容时,该字段实际上并不存在。
  3. 与 jar 文件一起部署的源文件确实包含此字段。

我尝试了很多东西:

  • 清理和构建项目并重新部署它。
  • 手动和使用 Eclipse 清理服务器的工作目录。
  • 在 Eclipse 中更改服务器的工作目录。
  • 在 Eclipse 中重新安装服务器。
  • 完全重新安装 Tomcat,安装 3 次,安装到不同的位置!

我很困惑。会是什么?

【问题讨论】:

  • 你能发布堆栈跟踪吗?

标签: eclipse jakarta-ee tomcat servlets eclipse-wtp


【解决方案1】:

这些症状表明您在 JRE/libJRE/lib/ext 或任何其他 Eclipse/Tomcat 独立类路径位置的某个 JAR 中有 com.maxmind.geoip.Location 类,这些位置在类加载方面总是优先于 WAR 的类。

在构建 loc.getClass().getProtectionDomain().getCodeSource().getLocation() 后检查它应该可以了解它实际从哪里加载。

【讨论】:

  • 嗯,它确实给了我所需的洞察力。由于一些不清楚的原因,JRE/lib/ext 文件夹中有一些不应该存在的 jar,并且包含该类的一些较旧的实现。删除它解决了我的情况。非常感谢!
【解决方案2】:

您是否在使用该字段?有没有参考。 Eclipse 完全有可能将其优化掉。

Windows-&gt;Preferences-&gt;Java-&gt;Compiler 中有一个设置:Preserve unused (never read) local variables。这是检查吗?如果没有,请检查并重试。

【讨论】:

  • 肯定用过。异常在被引用的地方引发。
猜你喜欢
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多