gpt4 book ai didi

java - 如何运行一个包含依赖库的jar?

转载 作者:行者123 更新时间:2023-12-01 11:48:07 27 4
gpt4 key购买 nike

我有一个 Maven 生成的 jar,其中包含位于名为 lib 的目录中的所有依赖项 jar。

app-0.0.1-SNAPSHOT.jar
|_ lib/
|_ app.properties
|_ app/
|_ spring/

但是,当我使用以下命令从命令行运行它时:

java -jar app-0.0.1-SNAPSHOT.jar

它提示找不到slf4j(实际上它包含在目录lib中)。基本上,它无法识别 lib 目录。

此 jar 是根据 this solution 使用 ma​​ven-dependency-pluginma​​ven-jar-plugin 创建的。正如解决方案所建议的,需要使用自定义类加载代码来加载 jar。我想知道这个类加载代码应该是什么样子。

Manifest.mf

Manifest-Version: 1.0
Built-By: me
Build-Jdk: 1.6.0_26
Class-Path: lib/camel-core-2.6.0.jar lib/commons-logging-api-1.1.jar ...
Created-By: Apache Maven 3.1.1
Main-Class: app.Main
Archiver-Version: Plexus Archiver

最佳答案

在答案中显示这一点可能比广泛的评论更容易......

您有两种选择来实现您想要的目标:

  1. 创建一个 jar 文件,将所有依赖项打包在其中
  2. 创建一个独立的 jar,其中仅包含 Artifact 的资源和类,但不包含依赖项。依赖的 jar 与 jar 一起放置在某个目录中。

要执行#1,您可以使用 maven-assemble-plugin 构建一个包含所有依赖项的 jar 文件,并在 POM 中使用以下内容:

<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>${main.class}</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>

这个 jar 中打包的 list 如下所示:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: <username>
Build-Jdk: 1.7.0_60
Main-Class: your.main.Class

使用此解决方案,类路径上不需要有一堆 jar,因为它们已经在 jar 中,在正确的包位置(以 .class 格式)

如果您选择#2,解决方案应该为您提供类似的内容(假设您的 target 目录中名为 lib 的目录中拥有所有依赖项

your.artifact.jar
lib
|-- dependent jars...

你的 jar list 将有:

Manifest-Version: 1.0
Built-By: me
Build-Jdk: 1.6.0_26
Class-Path: lib/camel-core-2.6.0.jar lib/commons-logging-api-1.1.jar ...
Created-By: Apache Maven 3.1.1
Main-Class: app.Main
Archiver-Version: Plexus Archiver

请注意,lib 目录并没有打包在您的 jar 中,而是放在它旁边(即,您自己将它们一起分发)

关于java - 如何运行一个包含依赖库的jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28996011/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com