gpt4 book ai didi

java - 在 Maven 中添加外部 JAR 会导致 NoClassDefFoundError

转载 作者:行者123 更新时间:2023-12-02 11:19:40 26 4
gpt4 key购买 nike

发现了一些与此问题相关的其他问题,但似乎都没有有效的解决方案来解决我的问题。

我有一个外部 JAR,需要包含在我生成的 jar 中。我目前正在这样做:

<dependency>
<groupId>be.april.meter</groupId>
<artifactId>JRPiCam</artifactId>
<version>1.1.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/jrpicam-1.1.1.jar</systemPath>
</dependency>

当在 IDE 中运行我的主类时,一切都按预期工作正常。然而,当尝试运行 Maven 生成的 JAR 时,我收到 NoClassDefFoundError 错误。我已经尝试生成一个“胖”/“阴影” jar 和所有这些东西,但没有任何帮助。

我还尝试使用 Maven 安装插件 ( https://eureka.ykyuen.info/2014/06/10/maven-include-system-scope-dependency-in-maven-assembly-plugin/ ) 安装 jar,但这给出了与我当前解决方案完全相同的错误。

完整的 pom.xml 可以在这里找到:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>be.april.meter</groupId>
<artifactId>April-Meter</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>be.april.meter.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>be.april.meter</groupId>
<artifactId>JRPiCam</artifactId>
<version>1.1.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/jrpicam-1.1.1.jar</systemPath>
</dependency>
</dependencies>

提前致谢。

--编辑:似乎 log4j 也不会加载。我通过添加解决了这个问题:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>compile</includeScope>
<outputDirectory>${project.build.directory}/lib/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>

这会导致 JRPiCam jar 与 log4j 依赖项一起位于/lib 输出目录中,但 JRPiCam 仍然无法工作。

最佳答案

您可以尝试讨论的 Maven 程序集插件。我刚刚验证过,它也适用于外部依赖项。运行时会创建一个可执行 jar。

mvn clean install

 <modelVersion>4.0.0</modelVersion>
<groupId>com.spring</groupId>
<artifactId>maven-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<properties>
<java.version>10</java.version>
</properties>


<dependencies>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.10.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.test.MyMain</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>


</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>


</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>10</source>
<target>10</target>
</configuration>
</plugin>
</plugins>
</build>

关于java - 在 Maven 中添加外部 JAR 会导致 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50022599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com