【发布时间】:2018-10-05 22:47:43
【问题描述】:
发现了一些关于这个问题的其他问题,但似乎没有一个有效的解决方案可以解决我的问题。
我有一个需要包含在我生成的 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 错误。我已经尝试生成一个“胖”/“阴影”罐子和所有这些东西,但没有任何帮助。
我还尝试使用 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,然后构建 jar?
-
是的,这基本上就是我使用 Maven 安装插件 (eureka.ykyuen.info/2014/06/10/…) 所做的。
-
您是否仅针对此外部 jar 中的类或所有依赖项收到此错误?
-
很奇怪,我只是试图注释掉主要使用 JRPiCam Jar 的所有内容。执行此操作时,我还获得了 log4j 的 classDefNotFound .. 似乎依赖项有问题?
-
你可能想列出 jar 文件的内容并检查
标签: java maven jar classpath pom.xml