我正在创建一个带有依赖项的jar。这是我POM中的相关部分
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>${project.basedir}</directory>
<includes>
<include>lib/*.jar</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>path.to.main.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
我可以使用mvn clean install
构建jar。但是当我运行它时
java -jar myProject-0.0.1-SNAPSHOT-jar-with-dependencies.jar
,我在一个来自lib文件夹中的jar的类上得到java.lang.NoClassDefFoundError
。
请注意,我已经通过
包含了这个jar <resource>
<directory>${project.basedir}</directory>
<includes>
<include>lib/*.jar</include>
</includes>
</resource>
那我为什么会收到错误?我究竟做错了什么?此外,当我解压缩jar时,我看到lib
文件夹和jar内。那么为什么myProject-0.0.1-SNAPSHOT-jar-with-dependencies.jar
无法找到它呢?
更新
我添加了
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
并在mvn clean install
我在控制台上看到了这个
[INFO]将my3rdParty.jar复制到path / to / project / target / lib / biomedical-my3rdParty-0.0.1.jar
答案 0 :(得分:1)
检查构建的JAR中的包含物。通常,如果您的类路径中包含此类的副本(在您的胖JAR中),您将遇到此问题。看看有问题的课程是否包括在内。要么是,要么是上述用户所说的内容(它在构建的JAR中没有正确构造)。