【发布时间】:2022-04-08 20:55:25
【问题描述】:
尝试使用 Maven 来组织我的项目,但我一直遇到以下错误。我知道这个错误意味着该文件在编译时存在,但由于某种原因在运行时找不到它。
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException
因此,我正在使用 Java 开发一个项目,该项目将接受用户查询、搜索 Google 图片,然后将一些结果下载到我的计算机上。为此,我不得不使用一些第三方库,例如 JSoup、Json-Simple 和 Gson。
我最初手动将 Jsoup 添加到我的类路径中并且它有效,但后来我听说了 Maven 并开始使用它。我的问题是,当我尝试运行我的代码时,我得到了上面的错误。
我只是不确定如何解决这个问题。我看过很多关于类似错误的其他帖子,我尝试相应地修改我的 pom.xml 但是 我只是无法让它工作。我试过删除 ~/.m2 文件,运行 mvn clean、mvn install、mvn package、mvn compile,一切正常。但是当需要运行时,我不断收到该错误。
这是我的大部分 pom.xml 文件。
<repositories>
<repository>
<id>central</id>
<name>Maven repository</name>
<url>http://repo1.maven.org/maven2</url>
</repository>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<!-- jsoup HTML parser library @ https://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
找到的解决方案:所以我省略了 pom.xml 文件的某些部分以使其更易于阅读,并且因为所有其他部分都是由 Maven 本身生成的,所以我认为那里的任何东西都不会有问题。但它添加了一个名为“pluginManagement”的标签,包含所有其他插件,显然这不允许 Shade 插件运行。
在 ngueno 的指导和这篇文章之间 Maven shade plugin is not called automatically for goal "package" 我能够弄清楚我的问题,尽管我仍然不完全确定为什么这是一个问题。无论如何,我想我会更新这篇文章,以防其他有类似问题的人偶然发现它。顺便说一句,这是在 Mac OS 上,以防万一。谢谢大家的帮助。
【问题讨论】:
-
你能在你的 IDE 上运行它吗?这个问题只有在你导出 JAR 时才会出现?
-
我在 macOS 终端上运行它。我确实安装了 NetBeans,但我没有为此使用它。
-
所以你只运行生成的JAR?
-
误会了,是的,我正在运行 Maven 生成的 JAR。我进入目标/类目录并输入命令“java com.mycompany.App”来运行程序。这对于我之前使用 Maven 作为练习制作的更简单的程序来说效果很好。