【问题标题】:In a collection of Maven subprojects that have common dependencies, can maven be set up to link those dependencies vs. copying them?在具有公共依赖关系的 Maven 子项目集合中,是否可以设置 Maven 来链接这些依赖关系而不是复制它们?
【发布时间】:2017-07-31 20:08:05
【问题描述】:

我有一个项目集合,它们都有一个大的第三方依赖项,在构建过程中将这个 jar 复制到所有项目似乎很浪费空间,是否可以让 maven 只创建一个指向单个缓存副本的硬链接还是软链接?

这不是 Maven multi-module: aggregate common dependencies in a single one? 的重复,它涉及如何从 pom 角度管理常见依赖项。这是关于如何避免将相同的依赖文件复制到多个项目的目标,而只创建指向单个实例的链接以节省空间。

问题的简单版本是:是否存在与 maven-dependency-plugin 的 copy-dependencies 目标等​​效的创建链接与复制文件的目标。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.4</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
        </execution>
    </executions>
</plugin>

【问题讨论】:

  • 好的,所以你自己做。下一个明显的问题是“为什么?”但你没有告诉我们。我不确定您是否认为通过描述整个构建过程会泄露公司机密,或者您是否认为“每个人都这样做”并假设我们都知道您要完成的工作。如果是后者,答案是否定的;人们通常不会将他们的依赖项复制到构建目录中。
  • 另一方面,如果您这样做一个原因,那么您需要告诉我们原因。否则你得到的任何答案都将是无关紧要的。我建议删除此问题并创建一个新问题,该问题 (1) 显示您的 POM,并且 (2) 解释您对复制的依赖项所做的操作。你可能会得到另一种方法,或者你可能不会(实际上,除非我们谈论的是千兆字节的依赖关系,否则它可能还不错)。
  • 原因是存在一个大小为几百 MB 的依赖项,并且每个模块都需要它。为每个模块复制它意味着在打包过程中,我需要大约 15Gb 的空间,而实际上我应该只需要大约 1 个。

标签: java scala maven maven-2


【解决方案1】:

是的,Maven 已经做到了。它将所有依赖项放在您的 .m2/repository/... 文件夹中。在 Windows 中,它是 c:\Users\[your_name]\.m2\repository。所以没有必要将它与 simlinks 或类似的 st 链接起来。只需让您的 Maven 项目在您的 Maven 存储库中搜索依赖项,您的依赖项将被所有需要这些依赖项的项目重用。如果您一直使用相同的 Maven,则 Maven 设置是相同的,并且对于每个项目,您的存储库文件夹都是相同的,所以您已经完成了。

所有不同的 jar 都保存在这里,因此您依赖的每个版本。如果多个项目依赖于相同的依赖项,并且具有相同的版本,那就是一个 jar 用于您的所有项目。

您可以删除所有依赖项并重新导入您的依赖项,如果您之前使用的是旧版本,而您现在使用的是较新版本,则您只是删除了旧版本,而新版本又回到了需要的地方。

【讨论】:

  • 你在谈论不同的事情。在构建过程中,它将这些依赖项复制到各个项目目标文件夹,我希望它只是链接它们,所以我没有同一个文件的 20 个副本。这就是这个问题的意义所在。
  • @JRGD - 不,实际上它复制依赖项,除非您正在生成 WAR 或阴影 JAR,然后无法复制,因为您正在有意将依赖项组合成一个可部署的模块。如果您看到在正常的jar 构建期间复制了依赖项,那么您的 POM 有问题。请编辑您的问题以包含您的 POM和显示您声称看到的行为的 target 目录列表
  • 在打包过程中,maven-dependency-plugin 执行复制依赖,我正在寻找类似链接依赖的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 2011-05-12
  • 2022-10-04
  • 1970-01-01
相关资源
最近更新 更多