运行maven项目时出错java.lang.ClassNotFoundException:org.apache.commons.io.IOUtils

时间:2016-07-16 05:47:58

标签: java apache maven dependencies repository

我创建了一个maven项目,并在pom.xml中添加了一个依赖apache commons-io  文件。

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>`

我添加了依赖性common-io,所以我可以在我的项目中使用commons.io.IOUtils来从资源文件夹中读取文件。 /src/main/resources/file/file.txt

一切都在编译和包装过程中有效,但是当我运行jar时

java -cp target / maven-1.0-SNAPSHOT.jar com.sample.exercise.Main

我收到此错误

   Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/IOUtils
        at com.sample.exercise.Main.getFileWithUtil(Main.java:21)
        at com.sample.exercise.Main.main(Main.java:13)
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.IOUtils
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 2 more
`

这是我的代码

package com.sample.exercise;

    import java.io.*;
    import java.util.*;
    import org.apache.commons.io.IOUtils;

    public class Main{

      public static void main(String[] args) {
          Main main = new Main();
          System.out.println(main.getFile("file/fileTable.txt"));

      } 

      private String getFileString fileName) {
          String result = "";
          ClassLoader classLoader = getClass().getClassLoader();
          try {
            result =IOUtils.toString(classLoader.getResourceAsStream(fileName));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
       }
}

问题是什么你能帮我这个吗? TIA

3 个答案:

答案 0 :(得分:0)

将依赖项更改为

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>

尝试做,maven clean和maven安装,maven命令是特定于操作系统的,但它也是如此。

尝试在下面添加到您的pom.xml

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4</version>
    <configuration>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
      <archive>
         <manifest>
            <mainClass>com.test.main</mainClass> // main being main.java which has my main method
         </manifest>
      </archive>
    </configuration>
    <executions>
      <execution>
        <id>make-assembly</id> <!-- this is used for inheritance merges -->
        <phase>package</phase> <!-- bind to the packaging phase -->
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

<sourceDirectory>src</sourceDirectory>
    <resources>
      <resource>
        <directory>src</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>

答案 1 :(得分:0)

https://mvnrepository.com/artifact/commons-io/commons-io/2.4

中给出的
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

答案 2 :(得分:0)

  

我不使用IDE我只是使用texteditor(gedit)代码和终端来运行程序。

在这种情况下,您需要将所有依赖项的JAR文件添加到 runtime 类路径中; e.g。

 $ java -classpath target/maven-1.0-SNAPSHOT.jar:path-to-commons-io-jar:... \
       com.sample.exercise.Main args

在理解Maven的IDE中构建/运行时,它会自动为运行时JAR添加依赖项。当您从命令提示符运行时,您需要自己处理...或者编写一个执行此操作的简单包装脚本。 (或者创建一个包含所有依赖项的“uberJAR”...)