在 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 中的说明进行操作。
希望对您有所帮助!
更新:关于本地存储库,我的意思可能与您在评论中提到的不同——我指的是每个用户计算机上的本地存储库,而不是内部网本地的存储库服务器。抱歉,如果造成任何混淆:)
我们有一个 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 中的说明进行操作。
希望对您有所帮助!
更新:关于本地存储库,我的意思可能与您在评论中提到的不同——我指的是每个用户计算机上的本地存储库,而不是内部网本地的存储库服务器。抱歉,如果造成任何混淆:)