Maven项目构建,但在运行时找不到类

时间:2018-11-20 22:06:57

标签: java maven gson

我有这个pom.xml文件:

C:\Program Files (x86)\Microsoft SDKs\Windows Kits

我有这个主文件:

<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>suman</groupId>
    <artifactId>suman</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>suman</name>
    <url>http://maven.apache.org</url>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>


        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>


    </dependencies>
</project>

然后安装:

package suman;

import java.net.*;
import java.io.*;
import com.google.code.gson.*;  // can't find this lib


public class App {
    public static void main(String[] args) {

        Gson gson = new Gson();
        gson.toJson(1);            

    }
}

,我得到这个编译错误

  

[错误]无法执行目标   org.apache.maven.plugins:maven-compiler-plugin:3.1:compile   (默认编译)在项目苏南上:编译失败:编译   失败:[ERROR]   /home/oleg/codes/oresoftware/oredoc/test/builds/java/gson/src/main/java/suman/App.java:[5,1]   包com.google.code.gson不存在[错误]   /home/oleg/codes/oresoftware/oredoc/test/builds/java/gson/src/main/java/suman/App.java:[17,9]   找不到符号[ERROR]符号:类Gson [ERROR]位置:   suman.App类[错误]   /home/oleg/codes/oresoftware/oredoc/test/builds/java/gson/src/main/java/suman/App.java:[17,25]   找不到符号[ERROR]符号:类Gson [ERROR]位置:   suman.App类

有人知道为什么找不到gson库吗?看起来真的很奇怪。

好吧,如果我将其更改为:

$ mvn install -DskipTests

然后将其编译,但是如果我使用import com.google.gson.*; 运行它,则会出现此运行时错误

  

线程“主”中的异常java.lang.NoClassDefFoundError:   com / google / gson / Gson           在suman.App.main(App.java:17)的原因:java.lang.ClassNotFoundException:com.google.gson.Gson           在java.base / jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)           在java.base / jdk.internal.loader.ClassLoaders $ AppClassLoader.loadClass(ClassLoaders.java:190)           在java.base / java.lang.ClassLoader.loadClass(ClassLoader.java:499)           ...还有1个

2 个答案:

答案 0 :(得分:2)

您的本地Maven存储库很可能没有用于以下目的的jar文件:

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.5</version>
    </dependency>

尝试从〜/ .m2 / repository / com / google / code / gson / gson / 2.8.5目录中查找。

如果没有像gson-2.8.5.jar这样的jar文件-简单的步骤就删除整个目录。

在下一个构建中,它将迫使Maven尝试从定义的远程存储库中下载该工件,然后您将看到它是如何传递的。

要么下载它,然后一切正常,要么就不会。

如果没有,请检查您的settings.xml(或pom文件)有关可从何处下载存储库(至少在Maven存储库列表(https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.5中),它是https://mvnrepository.com/artifact/com.google.code.gson/gson

如果已定义该存储库,并且位于公司代理之后,请在settings.xml中检查Maven的代理设置

BTW:在运行时,只要您构建jar(而不是war或ear),就必须在类路径中具有所有需要的jar文件。作为Maven的替代方案,您可以构建“胖罐”,所有依赖项中的所有类都将存在,但请准备好这将是一个非常大的胖罐。 :-)

答案 1 :(得分:2)

好,所以我正在与我建立项目

$ mvn install -DskipTests

然后运行:

$ java -cp target/suman-1.0-SNAPSHOT.jar suman.App

但是我应该使用mvn来运行它,就像这样:

$ mvn exec:java -Dexec.mainClass="suman.App"

现在它在类路径中具有正确的jar文件。使用普通的Java命令,它不知道在哪里找到com.google.code.gson jar文件。

顺便说一句,我不知道为什么编译失败:

import com.google.code.gson.*;

但这成功了:

import com.google.gson.*;

根据pom.xml文件,我认为前者并不正确,而后者将是正确的。

相关问题