gpt4 book ai didi

java - 如何使用 Maven 创建一个 jar,其中包含每个依赖项的单独文件夹中的依赖项

转载 作者:行者123 更新时间:2023-12-01 21:25:50 24 4
gpt4 key购买 nike

我想构建一个 Maven 项目,其依赖项位于 .jar 之外,但每个依赖项必须位于单独的目录中,如下所示:

libs/${dependency.groupId}/${dependency.artifactId}/${dependency.version}

就像这样:

/build
my.jar
/libs
/org.yaml
/snakeyaml
/1.17
snakeyaml-1.17.jar
/etc...

我知道有一个maven-dependency-plugin,但是如何配置它呢?或者有其他插件可以做到这一点吗?

最佳答案

您真正想要做的是为您的项目创建自定义存档。为此,您需要使用 maven-assembly-plugin .

需要考虑多个方面:

  • 您需要一个基目录 build 。这是由 <baseDirectory> 设置的参数。
  • 您希望将项目的所有依赖项都放在类似存储库的目录布局中。为此,您可以使用自定义 outputFileNameMapping对于 dependencySet 。这使得可以使用a set of properties ;在本例中,我们感兴趣的是组 ID、 Artifact ID 和版本。我们需要禁用<useProjectArtifact> ,否则它还会包含项目主要 Artifact 。
  • 对于主要 Artifact ,我们只需使用 <file> 元素,指向项目的主要 Artifact 。

程序集描述符如下所示:

<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>bin</id>
<formats>
<format>dir</format> <!-- to turn into final archive type -->
</formats>
<baseDirectory>build</baseDirectory>
<files>
<file>
<source>${project.build.directory}/${project.build.finalName}.${project.packaging}</source>
</file>
</files>
<dependencySets>
<dependencySet>
<outputDirectory>libs</outputDirectory>
<outputFileNameMapping>${artifact.groupId}/${artifact.artifactId}/${artifact.version}/${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
<useProjectArtifact>false</useProjectArtifact>
</dependencySet>
</dependencySets>
</assembly>

请注意,它使用 <format>dir ,这意味着它不会将输出结构“打包”到存档中,而是将其保留为目录结构。将来,您将能够使用启动器脚本自定义此程序集描述符,并通过将此格式更改为您想要的格式来对其进行最终存档。

最后,插件本身的配置是

<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor> <!-- path to the above assembly descriptor -->
</descriptors>
</configuration>
</execution>
</executions>
</plugin>

通过这样的配置,启动mvn clean install将在 target/${finalName} 中输出所需的目录结构.

关于java - 如何使用 Maven 创建一个 jar,其中包含每个依赖项的单独文件夹中的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38160271/

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