java - 'mvn clean' vs.'mvn clean install'(当插件执行附加到'clean'时)
问题描述
假设我想在编译项目之前将项目本地依赖项(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. maven.apache.org/maven2 ) -> [帮助 1]
出于某种原因,Maven 安装插件的 install-file 目标在这种情况下要么不运行,要么运行得不够快。为什么?我发现的其他 StackOverflow 答案解释了两个命令之间的差异,但在我看来,它们并没有解释这种特殊差异,因为我的项目没有模块。
有没有更好的方法跨平台做同样的事情,即使在构建服务器(例如 Jenkins)和至少一个其他依赖项目上?
如果有任何帮助,我有以下 Maven 版本:
- 命令行界面:3.6.0
- IDE:3.3.9
解决方案
Maven首先分析pom.xml
然后调用目标/阶段。分析本身很复杂,深度不同,所以我猜clean
单独调用不会让Maven分析依赖关系,但是调用clean install
会这样做。请注意,POM 分析只发生一次,而不是针对每个目标/阶段再次进行。
通常,不推荐您的方法。通常,您将项目依赖项放入远程 Maven 存储库中,以便可以通过它们解决它们。如果您在公司内部工作,您应该设置一个 Nexus/Artifactory 服务器来处理您的工件。
如果您希望公司以外的人构建工件,您需要找到 Maven 存储库的提供者。我想 github/gitlab 可以在这里为您提供帮助。然后您需要将这些存储库添加到 POM。
推荐阅读
- c# - 为什么 blazor 会渲染两次?
- apache-superset - Apache Superset 最新版本介于 0.38.1 和 1.0.1 之间
- javascript - 当我尝试从 chrome 扩展中的 url 下载文件时,Chrome 崩溃
- c++ - 这种执行重新排序是否可能
- ruby-on-rails - 某些 pdf 页面中缺少页眉和页脚 wicked_pdf
- angular - 单击时复制到剪贴板的方法。(ngx-toastr)
- python - Plotly:如何使用日期值创建热图?
- karate - 验证 SOAP 响应时出现“重试直到”的问题
- scikit-learn - 对 XGBoost 的 Mlflow 支持
- python - 使用 python 从 JSON 中获取特定数据