默认情况下,Maven不会在生成的JAR文件中捆绑依赖项,并且在尝试通过命令行执行JAR文件时,不会在类路径中提供依赖项。这就是为什么Java VM在尝试执行代码时找不到库类文件的原因。
你可以使用
-cp参数在类路径上手动指定库,但这很快就变得很麻烦。
更好的解决方案是将库代码“着色”到输出JAR文件中。有一个名为maven-shade-plugin的Maven插件可以执行此操作。你需要在POM中注册它,并且在运行时,它还会自动构建一个“ uber-JAR”,其中包含你的类以及库代码的类
mvn package。
要简单地捆绑所有必需的库,请将以下内容添加到你的POM中:
<project> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.6</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ...</project>
完成此操作后,你可以重新运行上面使用的命令:
$ mvn package$ java -cp target/bil138_4-0.0.1-SNAPSHOT.jar tr.edu.hacettepe.cs.b21127113.bil138_4.App
如果要根据应包含的JAR进行进一步的shade插件配置,为可执行的JAR文件指定Main-Class,等等,请参见maven-shade-plugin站点上的“示例”部分。



