【问题标题】:Despite having commons-lang included in pom, getting exception java.lang.NoSuchMethodError:org.apache.commons.lang.StringUtils.join尽管 pom 中包含 commons-lang,但出现异常 java.lang.NoSuchMethodError:org.apache.commons.lang.StringUtils.join
【发布时间】:2015-01-28 06:49:23
【问题描述】:

我有以下

String pattern = "\\b(" + StringUtils.join(mypattern, "|") + ")\\b";

在 pom.xml 中,我有依赖

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>

但是,当我执行时,尽管有 commons-lang,但我收到以下错误

java.lang.NoSuchMethodError:org.apache.commons.lang.StringUtils.join (Ljava/util/Collection;Ljava/lang/String;)Ljava/lang/String;

我该如何解决这个问题?

更新 1

战争内容

战争结构

【问题讨论】:

  • 这个 jar 在你的运行时类路径中吗?
  • 您的类路径中是否有旧版本(2.3 之前)的 commons-lang?
  • 这不是一个真正的布局——它只是一个 jar 文件的列表。它没有显示它们在 in 战争文件中的位置。服务器上的其他地方呢 - 是否有可能导致问题的旧版本的 commons-lang?
  • @Polppan 不,你没有。您只显示了战争中的顶级文件夹和文件。我们仍然不知道 jar 文件在 war 文件中的位置。
  • 对 - 那是我从一开始就追求的一点。那好吧。我有一个你可以使用的诊断步骤——在你的代码前面,打印出StringUtils.class.getClassLoader().getResource("org/apache/commons/lang/StringUtils.class")——它会告诉你从哪里加载类。

标签: java maven weblogic classpath apache-commons-lang


【解决方案1】:
  1. 查看您发布的行中是否存在错误(检查完整的堆栈跟踪)。
  2. 查看 commons-lang.jar 位于 war(文件夹 /WEB-INF/lib/)中,并且与您预期的 jar 版本相同。
  3. 查看没有加载其他 commons-lang。例如,如果你在 Tomcat 中部署,请检查在 tomcat/lib 目录中是否没有其他 commons-lang。

【讨论】:

  • 在 weblogic server 中,有com.bea.core.apache.commons.lang_2.1.0.jar,所以这一定是问题的原因?如果是这样,如何不使用服务器版本的 jar?
猜你喜欢
  • 2012-02-01
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
相关资源
最近更新 更多