Maven运行. jar文件声明缺少依赖项



我有一个Maven项目它使用了一些外部依赖项,主要是Jackson.当我运行mvn clean -e install时,它会在target目录中创建一个指定的jar文件。但是,当我在命令行中使用java运行这个jar文件时,我得到了错误消息:

Error: Unable to initialize main class com.test.package.Main
Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException

被混淆的Jackson的具体元素并不重要,错误消息将指出代码首先使用的Jackson的哪个部分。奇怪的是,当我在IntelliJ中运行这个项目时,它工作得很好。似乎JAR文件没有访问适当的依赖项。

这是pom.xml的相关部分:

<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.test.package.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<inherited>true</inherited>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<compilerArgument>-Xlint:unchecked</compilerArgument>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

我应该为构建的JAR文件在任何地方正常运行做一些事情吗?

已解决:这个解决方案从另一个线程修复我的问题:https://stackoverflow.com/a/42231035/8402030我不得不添加一个名为Maven Shade的插件,它创建了一个包含所有依赖项的超级jar。此外,必须从标签中删除插件。不完全确定为什么插件在外部很重要。如果有人知道,反馈将不胜感激。

最新更新