【问题标题】:how to copy dependency sources to a directory in maven如何将依赖源复制到maven中的目录
【发布时间】:2016-05-10 21:17:04
【问题描述】:

我知道使用mvn dependency:sources 可以下载所有依赖项的源。使用mvn copy-dependencies 可以将所有依赖项下载到指定的本地目录中。

如何将两者结合起来,以便我可以将所有依赖项的源代码复制到一个目录中?

【问题讨论】:

    标签: java maven jar


    【解决方案1】:

    你可以简单地使用

    mvn dependency:copy-dependencies -Dclassifier=sources
    

    它将下载链接到项目依赖项的所有源 jar,并将它们复制到 yourProject/target/dependency 文件夹中

    maven-dependency-plugin 的可选参数“分类器”记录在这里 https://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html

    【讨论】:

      【解决方案2】:

      我不会使用任何这些解决方案。

      只需将 maven-dependeny-plugin 包含到您的 maven 构建中并根据您的需要调整配置:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.10</version>
        <configuration>
          <outputDirectory>/tmp/alternateLocation</outputDirectory>
        </configuration>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>none</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>/tmp/alternateLocation</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>false</overWriteSnapshots>
              <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
          </execution>
        </executions>
      </plugin>
      

      您可以更改几个项目以满足您的需求,例如,在我给您的示例中,我认为它直接为您提供了解决方案,我已指定在任何阶段都不会复制alternateLocation 的依赖项在 tmp 文件夹中。但是我也说我的新目标是复制依赖。所以在命令行中会是这样的:

      mvn dependency:copy-dependencies
      

      如果您注意到我现在配置了两次 outputDirectory。在执行过程中,这意味着只有在运行指定的 maven 构建阶段时才会考虑它,例如 packagingcleantest、.. ...作为插件节点的第一个子兄弟节点,这意味着它会在命令行显式调用依赖插件时被考虑,这就是你想要的。

      您可以在此处找到有关 maven-dependency 插件的更多信息:

      由于您同时需要依赖项和源代码,所以我能想到的最好方法是正常运行 maven,而无需隐式调用实际插件。如果您通过 post-clean 阶段(即 mvn post-clean)运行它,它将运行以下两个目标:

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.10</version>
          <configuration>
              <outputDirectory>/tmp/alternateLocation</outputDirectory>
          </configuration>
          <executions>
              <execution>
                  <id>copy-dependencies</id>
                  <phase>post-clean</phase>
                  <goals>
                      <goal>copy-dependencies</goal>
                  </goals>
                  <configuration>
                      <outputDirectory>/tmp/alternateLocation</outputDirectory>
                      <overWriteReleases>false</overWriteReleases>
                      <overWriteSnapshots>false</overWriteSnapshots>
                      <overWriteIfNewer>true</overWriteIfNewer>
                  </configuration>
              </execution>
              <execution>
                  <id>sources</id>
                  <phase>post-clean</phase>
                  <goals>
                      <goal>copy-dependencies</goal>
                  </goals>
                  <configuration>
                      <classifier>sources</classifier>
                      <outputDirectory>/tmp/alternateLocation</outputDirectory>
                      <overWriteReleases>false</overWriteReleases>
                      <overWriteSnapshots>false</overWriteSnapshots>
                      <overWriteIfNewer>true</overWriteIfNewer>
                  </configuration>
              </execution>
          </executions>
      </plugin>
      

      它将始终复制到目标文件夹,但如果文件已经存在,则不会覆盖。我不得不选择一个不常用的阶段。 post-clean 似乎是这里的最佳人选。这只是想我想隔离这种构建。 post-clean 还会清理构建。如果您只想在每次构建时都继续使用此插件,那么我建议您将其置于 cleaninstall 阶段。这样一来,它总是在后台发生,您不必担心。

      【讨论】:

      • 我怀疑它确实会获取依赖项的来源。 :(
      猜你喜欢
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      相关资源
      最近更新 更多