maven的classNotFound错误?

时间:2017-04-21 12:38:08

标签: java import maven-2 noclassdeffounderror maven-dependency

我正在学习maven,但我在导入依赖项时面临问题,以下是我的pom.xml文件

interface Fn2 {
    (value: number): number;
}

// `example3` errors as function return type is inferred to be `number | undefined` which is incompatible with the expected `number` return type.
var example3: Fn2 = function(value) {
    if (value === -1) {
        return undefined;
    }
    return value;
};

以下是我的java文件

<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>

我使用 mvn compile 编译并使用 mvn package 创建了jar,两者都没有任何错误。但是当我使用命令

运行应用程序时
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();
    }
}

显示以下错误

java -cp target/myapp-1.0-SNAPSHOT.jar com.myapp.app.App

2 个答案:

答案 0 :(得分:4)

它给出application.scss错误的原因是,当你打包它时,它不会创建一个 fat / uber jar和jar文件,其中noclassfound存在,这不是你FTPClient的一部分,因此你得到 noclassfounderror

Maven Assembly Plugin 可帮助您创建一个胖jar(包括依赖项)jar并创建一个可运行的jar,您可以在其中为您的FQCN提供myapp-1.0-SNAPSHOT.jar方法。因此,当您运行fat jar时,它将具有所有依赖项,并且您的程序将正常运行。

在pom.xml中包含以下插件并运行Main命令。

mvn package

注意: - 此处使用您的完全限定类名更改 mainclass

如果它不起作用,请告诉我。

答案 1 :(得分:0)

我能够解决问题,将一些代码添加到pom.xml这里是我添加的代码

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                    <classpathPrefix>dependency/</classpathPrefix>
                    <mainClass>com.example.MainClass</mainClass>
                </manifest>
            </archive>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <id>copy-dependencies</id>
                <phase>package</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <useBaseVersion>false</useBaseVersion>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

编译并运行项目后,它可以完美运行。

当我使用mvn compile时,它只是编译我的主类,但它没有组合依赖项。这就是为什么当我尝试运行JAR文件时它会给出错误ClassNotFound,为此您需要添加mvn plugin copy-dependencies并添加执行标记以执行mvn命令{{1} }