如何将罐子的源头下载到maven中的自定义位置?

时间:2016-01-10 03:57:34

标签: maven maven-2 pom.xml maven-dependency-plugin maven-jar-plugin

这是How to get all the specified jars mentioned in the pom.xml and transitively dependent jars?的后续帖子 除了我想要将依赖和传递依赖的罐子的来源下载到自定义提到的位置。

我尝试过以下命令,但它没有效果。

mvn dependency:sources -DoutputDirectory=.../

它没有用。

mvn dependency:sources dependency:copy-dependencies -DoutputDirectory=.../

它没有用。

1 个答案:

答案 0 :(得分:1)

源jar通常可以通过Maven使用classifier获得,因此对于相同的Maven坐标(GAV,groupId,artifactId,version),您可以拥有多个与同一构建相关的人工制品(即默认)应用程序/库jar,源jar,测试源jar,javadoc jar等,也在另一个SO answer中解释。源的标准分类器是sources,由Maven Source Plugin创建。

copy-dependencies可以配置为通过classifier选项获取某个分类器。

因此,在您的情况下,要将依赖项的源代码提供给外部文件夹,您可以按如下方式调用命令:

mvn dependency:copy-dependencies -DoutputDirectory=somewhere -Dclassifier=sources

请注意其他-Dclassifier=sources选项。

使用以下代码片段在Dependency Plugin的official documentation中解释了实现相同功能的pom配置示例:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.10</version>
        <executions>
          <execution>
            <id>src-dependencies</id>
            <phase>package</phase>
            <goals>
              <!-- use copy-dependencies instead if you don't want to explode the sources -->
              <goal>unpack-dependencies</goal>
            </goals>
            <configuration>
              <classifier>sources</classifier>
              <failOnMissingClassifierArtifact>false</failOnMissingClassifierArtifact>
              <outputDirectory>${project.build.directory}/sources</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

要注意尽管Maven不了解来源,但它只知道人工制品。因此,如果通过其GAV + C无法获得源(分类)人工制品,Maven将会找到它,因此不会下载任何来源。