gpt4 book ai didi

maven - 使用 Maven 在 list 的类路径中生成非版本化的 jar 条目

转载 作者:行者123 更新时间:2023-12-04 22:33:37 24 4
gpt4 key购买 nike

为了实现可执行的 jar 文件,我将以下内容添加到 pom.xml:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>my.main.Class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>

结果是 (MANIFEST.MF)
...
Class-Path: library1-8.10-SNAPSHOT.jar hessian-4.0.7.jar library2-8.10-SNAPSHOT.jar json-lib-2.2.3-jdk15.jar ezmorph-1.0.6.jar library3-8.10-SNAPSHOT.jar commons-io-1.4.jar
...

等等

这意味着,jar 的版本包含在文件名中。我希望它没有它:
Class-Path: library.jar hessian.jar library2.jar json-lib.jar ezmorph.jar library3.jar commons-io.jar

仅仅是因为这是它们在 lib 文件夹中的命名方式。

我们使用的是 Maven 2.2,因此 classpathLayoutType 和 customClasspathLayout 不可用(如果它们有帮助的话)。

任何人都可以帮忙吗?

最佳答案

为什么他们在 lib 中没有版本目录?你不是在用proper dependency management吗? ,Maven 提供的东西(并且是首先使用 Maven 的主要原因之一)?

使用没有版本的 jar 是一个坏主意,因为您无法轻松判断系统上安装了哪个版本的库。问题不在于 Class-Path是错误的,但应该对库进行版本控制。构建的其余部分存在问题。那么,您如何声明依赖项,以及如何构建最终包?

如果你真的想这样做,那么你可以customize the maven-archiver ,指定 classpathLayoutType应该是 custom ,以及 customClasspathLayout应该是 ${artifact.artifactId}.${artifact.extension} .例如:

    <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathLayoutType>custom</classpathLayoutType>
<customClasspathLayout>lib/${artifact.artifactId}${artifact.dashClassifier?}.${artifact.extension}</customClasspathLayout>
<mainClass>my.main.Class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>

(请注意,我添加了 lib/ 前缀,您可以随意删除它或用您需要的任何内容替换它)

关于maven - 使用 Maven 在 list 的类路径中生成非版本化的 jar 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14219504/

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