我有这个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>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);
}
}
然后我安装:
$ mvn install -DskipTests
我得到这个编译错误:
[错误]无法执行目标org.apache.maven.plugins:maven-compiler-plugin:3.1:在项目suman上编译(default-compile):编译失败:编译失败:[ERROR] / home / oleg / codes / oresoftware / oredoc / test / builds / java / gson / src / main / java / suman / App.java:[5,1]包com.google.code.gson不存在[ERROR] / home / oleg / codes / oresoftware / oredoc / test / builds / java / gson / src / main / java / suman / App.java:[17,9]找不到符号[ERROR]符号:class Gson [ERROR] location:class suman.App [ERROR ] /home/oleg/codes/oresoftware/oredoc/test/builds/java/gson/src/main/java/suman/App.java:[17,25]找不到符号[ERROR]符号:class Gson [ERROR]位置:类suman.App
有谁知道为什么它找不到gson库?看起来很奇怪 .
好的,如果我把它改成:
import com.google.gson.*;
然后它编译,但是如果我用 java -jar
运行它,我得到这个运行时错误:
线程“main”中的异常java.lang.NoClassDefFoundError:com / google / gson / Gson at suman.App.main(App.java:17)引起:java.lang.ClassNotFoundException:com.google.gson.Gson at java.base / jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)位于java.base / java的java.base / jdk.internal.loader.ClassLoaders $ AppClassLoader.loadClass(ClassLoaders.java:190) . lang.ClassLoader.loadClass(ClassLoader.java:499)......还有1个
2 回答
很可能您的本地Maven存储库没有jar文件:
尝试从〜/ .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的替代方案,您可以构建“胖 jar ”,并且所有依赖项中的所有类都将存在,但是准备好它将是一个非常大的胖 jar . :-)
好的,所以我正在构建我的项目
然后运行它:
但我应该使用mvn来运行它,就像这样:
现在它在类路径中有正确的jar文件 . 使用plain java命令,它不知道在哪里可以找到
com.google.code.gson
jar文件 .顺便说一句,我不知道为什么这不能编译:
但这成功了:
根据pom.xml文件,我认为前者不是后者是正确的 .