比方说,我想在编译项目之前将项目本地依赖项(jar文件)安装到本地maven存储库(〜/ .m2)中,因此我可以在POM中引用它们,就像引用Maven中的任何依赖项一样中央。目前,我正在使用附加到“清理”阶段的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(默认为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:在中央找不到工件group.id:artifact.id:jar:artifact.version({{3 }})-> [帮助1]
由于某种原因,Maven安装插件的安装文件目标在这种情况下无法运行,或者运行得不够快。为什么?我发现的其他StackOverflow答案可以解释这两个命令之间的差异,但是在我看来,由于我的项目没有模块,因此它们无法解释这一特定差异。
即使在构建服务器(例如Jenkins)以及至少有一个其他依赖项目上,是否有更好的方法可以跨平台执行同一操作?
应该有什么帮助,我有以下Maven版本:
答案 0 :(得分:0)
Maven首先分析pom.xml
,然后调用目标/阶段。分析本身是复杂的并且具有不同的深度,所以我想单独调用clean
不会使Maven分析依赖关系,但是调用clean install
可以做到。请注意,对POM的分析仅发生一次,而不是针对每个目标/阶段都进行一次。
通常,不推荐使用您的方法。通常,您将项目依赖项放入远程Maven存储库中,以便可以通过它们来解决它们。如果您在公司内部工作,则应设置一个可处理工件的Nexus / Artifactory服务器。
如果希望公司外部的人员构建工件,则需要找到Maven存储库的提供者。我想github / gitlab在这里可以为您提供帮助。然后,您需要将这些存储库添加到POM。