我正在学习 maven,但在导入依赖项时遇到问题,以下是我的 pom.xml 文件
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myapp.app</groupId>
<artifactId>myapp</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>myapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
</dependencies>
</project>
以下是我的java文件
import org.apache.commons.net.ftp.FTPClient;
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
FTPClient ftp = new FTPClient();
}
}
我使用 编译mvn 编译 并使用 创建了 jar mvn 包 两者都执行没有任何错误。但是当我使用命令运行应用程序时
java -cp target/myapp-1.0-SNAPSHOT.jar com.myapp.app.App
它显示以下错误
Hello World!
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/net/ftp/FTPClient
at com.myapp.app.App.main(App.java:16)
Caused by: java.lang.ClassNotFoundException:
org.apache.commons.net.ftp.FTPClient
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
最佳答案
它给出的原因noclassfound
错误在于,当您打包它时,它不会创建 脂肪/ super jar 和 jar 文件,其中 FTPClient
存在,这不属于您的 myapp-1.0-SNAPSHOT.jar
,因此你得到 noclassfounderror .
Maven 组装插件 帮助您创建一个胖 jar(包括依赖项)jar 并创建一个可运行的 jar,您可以在其中提供您的 FQCN Main
方法。因此,当您运行胖 jar 时,它将拥有所有依赖项,并且您的程序将运行良好。
在 pom.xml 中包含以下插件并运行 mvn package
命令。
<!-- Maven Assembly Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<!-- get all project dependencies -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- MainClass in mainfest make a executable jar -->
<archive>
<manifest>
<mainClass>com.myapp.app.App</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!-- bind to the packaging phase -->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
注意:- 这里更改 主类使用您的完全限定类名。
如果它不起作用,请告诉我。
关于java - maven 的 classNotFound 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43542951/