eclipse - 定义字段时出现 java.lang.NoSuchFieldError 异常

标签 eclipse jakarta-ee tomcat servlets eclipse-wtp

我正在为 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 的异常 < strong>ip 地址。

此外,在尝试调试它时 (Eclipse),当我到达调用 Location loc = new Location() 的地方时,会发生两件奇怪的事情:

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

我试过很多东西:

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

我被困住了。会是什么?

最佳答案

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

在构建之后检查 loc.getClass().getProtectionDomain().getCodeSource().getLocation() 应该可以了解它实际的加载位置来自。

关于eclipse - 定义字段时出现 java.lang.NoSuchFieldError 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8183214/

相关文章:

jakarta-ee - jboss 是否为我处理托管实体管理器并发问题?

java - 在 Tomcat 中运行不同 Java 版本的 Web 应用程序

java - eclipse /Tomcat : tomcat home page is reachable but app is not

php - Eclipse 如何禁用 Debug模式

Android 在 Arch Linux 64 位 : error while loading shared libraries: libz. so.1 上构建

Java开源帮助台+工作流项目

java - (Eclipse - OS X) 如何从 javadoc 弹出窗口复制?

java - 使用 JAX-RS 时返回对象列表

java - Spring Boot Web 应用程序无法在 Tomcat 上运行 - 404 错误

少量用户的 Tomcat 吞吐量限制