依赖关系之间的区别是什么:在命令行中使用复制mojo并在pom文件中配置相同的pulgin作为构建插件

时间:2015-08-03 17:20:33

标签: java maven maven-scm

我想找到io.airlift的所有依赖项:node:0.112,下载最小文件:

  1. 使用命令%M2_HOME%/ bin / mvn依赖项:copy -Dmdep.outputScope = true -DincludeScope = compile -DincludeParents = true -DoutputFile =" F:\ temp \ mytemp5&#34 ; -DexcludeTransitive = true -f" F:\ maven-plugins \ node-0.112.pom" ,它正在下载 org.apache.maven.scm:maven-scm-provider- gitexe:1.8.1

  2. 如果我创建一个虚拟pom并依赖于node-0.112,然后在dummy pom上运行相同的命令,它就不会下载 org.apache.maven.scm:maven- SCM-提供商-gitexe:1.8.1 即可。下面是我的pom文件:

    <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>dummy</groupId>
      <artifactId>dummy</artifactId>
      <version>1.0</version>
      <packaging>pom</packaging>
      <dependencies>
        <dependency>
         <groupId>io.airlift</groupId>
         <artifactId>node</artifactId>
         <version>0.112</version>
         <type>pom</type>
        </dependency>
       </dependencies>
       <build>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-dependency-plugin</artifactId>
              <version>2.8</version>
              <executions>
                <execution>
                  <id>copy-dependencies</id>
                  <phase>package</phase>
                  <goals>
                    <goal>copy-dependencies</goal>
                  </goals>
                  <configuration>
                    <addParentPoms>true</addParentPoms>
                    <copyPom>true</copyPom>
                    <outputDirectory>.</outputDirectory>
                    <excludeTransitive>false</excludeTransitive>
                    <useRepositoryLayout>true</useRepositoryLayout>
                    <includeScope>compile</includeScope>
                  </configuration>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </build>
      </project>
    
  3. 同样 org.apache.maven.scm:maven-scm-provider-gitexe:1.8.1 甚至不作为两种方法的依赖项返回。

    为什么maven试图下载这个额外的插件?在不下载额外插件的情况下找到依赖项的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

io.airlift:node:0.112 pom中包含以下几行:

<scm>
  <connection>scm:git:git://github.com/airlift/airlift.git</connection>
  <developerConnection>scm:git:git@github.com:airlift/airlift.git</developerConnection>
  <url>https://github.com/airlift/airlift/tree/master</url>
  <tag>0.112</tag>
</scm>

SCM代表Software Configuration Management,它基本上是定义作者如何维护其来源的pom的一部分。有关更多信息,请参阅链接

So, the executable is this; there's not much at that link but you can take a look.这会导致org.apache.maven.scm:maven-scm-provider-gitexe:1.8.1被下载,以方便项目与其git存储库的连接。它不是对项目本身的依赖,但依赖于项目的维护方式 - 通过使用git进行版本控制。

因此,如果您执行mvn dependency:copy,它将下载gitexe,但如果您创建的新项目没有定义git scm(和事实上,根本没有定义SCM,然后它不会下载可执行文件。