假设我想在编译项目之前将项目本地依赖项(jar 文件)安装到我的本地 maven 存储库 (~/.m2),这样我就可以在我的 POM 中引用它们,就像我从 Maven Central 引用任何依赖项一样。目前,我正在使用 Maven 安装插件的安装文件目标附加到“干净”阶段(因为我的 IDE 使用它),如下所示:
<dependencies>
<dependency>
<groupId>group.id</groupId>
<artifactId>artifact.id</artifactId>
<version>artifact.version</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>install-my-local-dependency</id>
<phase>clean</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<groupId>group.id</groupId>
<artifactId>artifact.id</artifactId>
<version>artifact.version</version>
<file>${project.basedir}/lib/local-dep.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
当我执行mvn clean
(或在 IDE 中等效)时,一切都按我的预期运行:
--- maven-clean-plugin:2.5:clean (default-clean) @ MyProject ---
--- maven-install-plugin:2.5.2:install-file (install-...) @ MyProject --- 安装 ${project.basedir}/lib/local-dep.jar 到 ~/.m2/repository /group.id/artifact.id/local-dep.jar
但是,当我mvn clean install
改为执行(或在 IDE 中执行它的等效项)时,出现以下错误:
无法在项目 MyProject 上执行目标:无法解析项目 com.example.MyProject:jar:1.0 的依赖项:在中央 ( https: //repo.xml) 中找不到工件 group.id:artifact.id:jar:artifact.version 。 maven.apache.org/maven2 ) -> [帮助 1]
出于某种原因,Maven 安装插件的 install-file 目标要么在这种情况下不运行,要么运行得不够快。为什么?我发现的其他 StackOverflow 答案解释了两个命令之间的差异,但在我看来,它们并没有解释这种特殊差异,因为我的项目没有模块。
即使在构建服务器(例如 Jenkins)和至少一个其他依赖项目上,是否有更好的跨平台方式做同样的事情?
如果有任何帮助,我有以下 Maven 版本:
Maven 首先分析pom.xml
然后调用目标/阶段。分析本身很复杂,深度不同,所以我猜clean
单独调用不会让Maven分析依赖关系,但是调用clean install
会。请注意,POM 的分析仅发生一次,而不是针对每个目标/阶段再次进行。
通常,不能推荐您的方法。通常,您将项目依赖项放入远程 Maven 存储库中,以便可以通过它们进行解析。如果您在公司内部工作,您应该设置一个 Nexus/Artifactory 服务器来处理您的工件。
如果您希望公司以外的人构建工件,则需要找到 Maven 存储库的提供者。我想 github/gitlab 可以在这里帮助你。然后您需要将这些存储库添加到 POM。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句