Java 如何使用外部jar库构建maven可执行jar?
我正在尝试基于Maven构建我的应用程序的jar文件。所以我不需要在构建中包含外部jar库。我需要我的应用程序在运行时从本地maven存储库或本地文件夹提供此外部依赖项,这些存储库将包含这些外部库。 我为此依赖项配置pom文件,如下所示:Java 如何使用外部jar库构建maven可执行jar?,java,maven,jar,pom.xml,Java,Maven,Jar,Pom.xml,我正在尝试基于Maven构建我的应用程序的jar文件。所以我不需要在构建中包含外部jar库。我需要我的应用程序在运行时从本地maven存储库或本地文件夹提供此外部依赖项,这些存储库将包含这些外部库。 我为此依赖项配置pom文件,如下所示: <profiles> <profile> <id>compile</id> <dependencies>
<profiles>
<profile>
<id>compile</id>
<dependencies>
<dependency>
<groupId>groupId</groupId>
<artifactId>some.artifact</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</profile>
编译
groupId
但是在运行时,当我试图执行一个方法时,使用这个外部库,我得到了java.lang.NoClassDefFoundError
,其中包含我的外部库中的类名
那么我如何构建一个将使用本地存储的外部jar库的构建呢?因此我找到了在最终maven构建之外存储jar的解决方案。
我只需要用正确的路径将这个jar添加到类路径中。为此,我将其添加到pom.xml中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>${project.build.finalName}.lib/</classpathPrefix>
<mainClass>your.mainClass</mainClass>
</manifest>
<manifestEntries>
<Class-Path>project-0.0.1-SNAPSHOT.lib/some.lib-1.1.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
org.apache.maven.plugins
maven jar插件
3.0.2
真的
${project.build.finalName}.lib/
你的主课
project-0.0.1-SNAPSHOT.lib/some.lib-1.1.jar
就像这里:构建包含所有依赖项的自包含可执行jar文件更为常见。使部署更加容易和安全@Thilo:如果依赖项中有一个像Bouncycastle这样的库,这就不起作用了,因为它是一个签名加密提供程序,而带有依赖项的jar会杀死jar签名,这会导致BC失败。