java – 如何将依赖项源复制到maven中的目录

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

如何将两者结合起来以便将所有依赖项的源复制到目录中?

最佳答案 我不会使用任何这些解决方案.

只需将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>

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

mvn dependency:copy-dependencies

如果你注意到我现在已经配置了两次outputDirectory.在执行过程中,这意味着只有在运行指定的maven构建阶段(例如打包,清理,测试……)时才会考虑它.作为插件节点的第一个子兄弟,这意味着当命令行显式地调用依赖插件时,将考虑它,这是你想要的.

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

> https://maven.apache.org/plugins/maven-dependency-plugin/examples/copying-project-dependencies.html

由于您需要同时使用依赖项和源代码,因此我能想到的最佳方法是正常运行maven而不需要对实际插件进行隐式调用.如果你通过后清洁阶段(即mvn后清理)运行它将运行以下两个目标:

<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也可以清理构建.如果你只想在每次构建时继续使用这个插件,那么我建议把它放在干净或安装阶段.这样它总是发生在后台,你不担心它.

点赞