【问题标题】:StringUtils class not found未找到 StringUtils 类
【发布时间】:2018-04-15 15:44:58
【问题描述】:

我编写了一个控制台应用程序,它将一个文本文件读取为字符串,然后处理文件内容。我在我的项目中使用了 ma​​ven,启用了自动导入,添加了适当的依赖项,但是,当我尝试使用 replace() 方法(此方法属于 org.apache.commons.lang3.StringUtils 类)处理字符串时,我得到了下面提到的错误。此外,当我在 intelliJ 中启动我的应用程序时,它运行良好,一切似乎都很好。当我使用 maven 编译和构建 .jar 文件然后通过终端启动它时,它会报告此错误:

线程“主”java.lang.NoClassDefFoundError 中的异常: org/apache/commons/lang3/StringUtils 在 com.company.Reader.process(Reader.java:47) 在 com.company.App.main(App.java:9) 原因: java.lang.ClassNotFoundException:org.apache.commons.lang3.StringUtils 在 java.net.URLClassLoader.findClass(URLClassLoader.java:381) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357)

另外,我的 pom.xml 中的依赖项如下所示:

 <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.5</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.5</version>
    </dependency>
      <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
      <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-lang3</artifactId>
          <version>3.4</version>
      </dependency>
      <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-library</artifactId>
      <version>1.3</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-all</artifactId>
      <version>1.8.4</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

我不知道可能出了什么问题。我知道一种使我的程序工作的方法,即手动下载带有 commons-lang3 的 .jar 并将其包含在我的项目中,但这对我来说不是一个令人满意的解决方案。有谁知道我为什么会收到这样的错误? 提前致谢

【问题讨论】:

    标签: java string maven intellij-idea apache-stringutils


    【解决方案1】:

    你没有放整个 pom.xml,但我猜你忘记了依赖:

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.4</version>
    </dependency>
    

    您说您的项目在 Intellij 中运行,那么您的计算机中已经有了 common-lang3。

    我认为问题在于 maven 依赖项。

    尝试在项目的根文件夹中通过命令行执行:mvn clean install

    你需要把你的commons-lang3-3.4.jar 放在类路径中

    两个链接可以帮助你:

    https://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html

    Run a JAR file from the command line and specify classpath

    【讨论】:

    • 不,其实我没有忘记这个依赖。现在您可以在 pom.xml 中看到我的整个依赖项部分(在我刚刚点击错误并且我的粘贴没有添加到这个问题之前,现在我对其进行了编辑)而且我每次在 pom 或代码中更改某些内容时都会运行 mvn clean install package在尝试解决此问题时,事实并非如此。虽然感谢您的帮助。
    • 你是如何创建 jar 的?你能展示你是如何创建和运行 jar 的吗?您可以为此使用 maven 插件:stackoverflow.com/questions/15869784/…
    • 我正在使用来自 org.apache.maven.plugins 的 maven-jar-plugin 创建 jar。另外,我现在尝试以您的方式创建 jar,但它失败了 - 错误消息是:无法在项目 task1 上执行目标 org.codehaus.mojo:exec-maven-plugin:1.2.1:java (default-cli) : 执行 Java 类时发生异常。
    • 我正在通过 mvn clean install package 制作 jar。然后我通过移动到存储 jar 的目录并使用 java -jar 来运行它
    • 如果你运行 java -jar 没有指定类路径,那么 commons-lang3-3.4.jar 需要在你运行的同一个文件夹中。
    猜你喜欢
    • 1970-01-01
    • 2018-05-03
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2014-01-12
    • 2014-04-21
    相关资源
    最近更新 更多