在 Maven 依赖插件中使用本地 jar 作为工件?

Use local jar as artifact in maven dependency plugin?

我们有一个 Maven 项目,其中我们使用了一些在任何远程存储库中都不存在的工件。它们作为已编译的 .jar 文件包含在我们项目的某个目录中,例如 /lib。其中一些是 "plain" 依赖项,我们可以使用 scope system + systemPath 从 /lib 中利用这些依赖项,但是有一个工件应该与 maven-dependency-plugin 解包目标一起使用。 pom.xml 的相关部分看起来像这样

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-dependency-plugin</artifactId>
   <executions>
       <execution>
           <id>unpack-resources</id>
           <phase>generate-resources</phase>
           <goals>
               <goal>unpack</goal>
           </goals>
           <configuration>
               <artifactItems>
                   <artifactItem>
                       <groupId>xxx.yyy.zzz</groupId>
                       <artifactId>ourartifact</artifactId>
                       <outputDirectory>${target.directory}/somedir</outputDirectory>
                       <includes>
                           files1/**,files2/**,files3/**
                       </includes>
                   </artifactItem>
               </artifactItems>
           </configuration>
       </execution>
   </executions>
</plugin>

然而,这仍然会尝试访问远程存储库并从那里获取工件,这当然不会成功。我们能否以某种方式实现该工件也试图从 /lib 中获取?

不是从 /lib 中获取,如果设置您自己的 Nexus/Artifactory/etc... 现在有点过分,您可以将 jar 添加到您的本地存储库。每个人都必须在自己的计算机上执行此操作,但一旦到了那里,该计算机上的所有 maven 构建项目都可以使用它,因此您不必为每个项目都有一个 /lib 副本。如果你自己编译那个 jar 并且它是一个 maven 项目,你可以做 "mvn install" 并且它将安装到你的本地 repo。请注意,mvn 包不会安装到您的本地存储库。

如果这是第 3 方 jar,您可以使用 mvn install:install-file 来执行此操作。为此,请按照 https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html 中的说明进行操作。

希望对您有所帮助!

更新:关于本地存储库,我的意思可能与您在评论中提到的不同——我指的是每个用户计算机上的本地存储库,而不是内部网本地的存储库服务器。抱歉,如果造成任何混淆:)