我创建了一个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
答案 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”...)