“ mvn clean”与“ mvn clean install”(当插件执行附加到“ clean”时)

时间:2019-08-12 09:43:54

标签: java maven

比方说,我想在编译项目之前将项目本地依赖项(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版本:

  • CLI:3.6.0
  • IDE:3.3.9

1 个答案:

答案 0 :(得分:0)

Maven首先分析pom.xml,然后调用目标/阶段。分析本身是复杂的并且具有不同的深度,所以我想单独调用clean不会使Maven分析依赖关系,但是调用clean install可以做到。请注意,对POM的分析仅发生一次,而不是针对每个目标/阶段都进行一次。

通常,不推荐使用您的方法。通常,您将项目依赖项放入远程Maven存储库中,以便可以通过它们来解决它们。如果您在公司内部工作,则应设置一个可处理工件的Nexus / Artifactory服务器。

如果希望公司外部的人员构建工件,则需要找到Maven存储库的提供者。我想github / gitlab在这里可以为您提供帮助。然后,您需要将这些存储库添加到POM。