我正在尝试使用(导入)由我的项目的依赖项添加的类。 我在pom.xml中添加了依赖项gson,如下所示:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
然后我跑了mvn install
。
现在,我可以在C:\Users\%Name%\.m2\repository\com\google\code\gson\gson\2.8.5
中找到jar依赖项,因此我假设它已正确安装。
当我尝试用Java导入类Gson时,会发生一些问题:
com.google.code.gson
,而是com.google.gson
,我不明白为什么。当我使用mvn软件包进行编译时,一切运行顺利。但是,如果我尝试使用java -cp .\target\testJSON-1.0-SNAPSHOT.jar json.App
运行代码,则会收到以下错误,告诉我未找到Gson类:
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/gson/Gson
at json.App.main(App.java:13)
Caused by: java.lang.ClassNotFoundException: com.google.gson.Gson
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
现在通过寻找解决方案,我的理解是:
虽然maven知道项目的依赖项,但是java
不会。而且我需要手动将jar添加到类路径中。
所以我的问题是:
java -cp folder/*.jar
。由Maven生成的jar位于我项目的目标子文件夹中,而gson jar位于.m2文件夹中。如何将多个jar(位于不同位置)添加到类路径?谢谢
答案 0 :(得分:3)
导入路径不是com.google.code.gson
Google Code在2016年被关闭,他们更改了组ID。
找不到Gson类
GSON JAR不在类路径上。
如果我要告诉Maven我需要gson来运行我的项目,为什么我需要 手动包括所有依赖项来运行吗?有没有办法 以简单直观的方式自动执行此操作?
Maven是一个构建工具,它已经成功构建了您的应用程序。 Java 要求您在类路径中包括JAR。这不是Maven的不足。如果要将所有依赖项捆绑到一个“可以运行”的JAR中,请create a fat JAR。
如何将多个jar(位于不同位置)添加到 类路径?
如果创建胖JAR,则不必这样做,但是可以像这样(OS-specific)分隔类路径条目:
java -cp folder/*.jar;another/folder/*.jar
答案 1 :(得分:1)
在使用maven创建jar时,您可能需要包括依赖项。您可以使用maven-assembly插件,
<build>
<plugins>
<!-- any other plugins -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>