预下载所有依赖项
Posted
技术标签:
【中文标题】预下载所有依赖项【英文标题】:Pre-download all dependencies 【发布时间】:2016-06-26 23:28:44 【问题描述】:我需要将我们的 Maven 构建 Java 项目发布给远程 QA 团队。为此,我想下载所有依赖项,然后发送它们,这样他们就不需要下载它们了。
目前所有依赖项都在pom.xml
文件中定义,我们使用mvn install
或mvn package
来构建项目。一些项目成员使用 uber jars,其他人使用 jars + 依赖项来执行。
什么是最简单的方法来预先打包依赖的 jar 文件,这样就不会从互联网上下载,并且不会过多地改变我们当前的构建过程?
【问题讨论】:
在您的网络中创建一个本地 maven 存储库,例如 artifactory。这样,依赖项就会缓存在您的本地网络中。 你能详细解释一下这个过程吗?我将如何打包这个本地 maven 存储库并将其发送给远程团队? 不,本地网络中的存储库只会阻止每个团队成员从 Internet 下载所有依赖项。相反,它们将被缓存在存储库中,并且可以从那里下载。现在我不明白你为什么要向他们发送任何依赖项。 maven 依赖项的全部目的是您不必打包和发送它们,而只需要在 pom.xml 中引用它们 或者,您可以使用mvn dependency:go-offline
离线并制作本地仓库的 ZIP。
您的构建系统效率低下。您应该生成单个发布工件(可能有很多文件),并在环境之间进行推广。现在你真的不知道测试人员已经测试了你构建的同样的东西——任何东西都可能在那些 pom 或依赖项中。
【参考方案1】:
一个可能的解决方案是清除您的本地存储库,告诉 Maven 下载您项目的每个依赖项和插件依赖项并制作一个 ZIP。
要清除本地存储库,您只需删除文件夹 user.home/.m2/repository
。然后,您可以使用dependency:go-offline
目标:
解决所有项目依赖项的目标,包括插件和报告及其依赖项。
mvn dependency:go-offline
这将下载您的项目所依赖的所有内容,并确保在以后的构建中不会下载任何内容。
然后,您只需制作一个 user.home/.m2/repository
的 ZIP 并将其发送给您的 Q/A 团队。他们需要将其解压缩到自己的 user.home/.m2/repository
中才能构建项目。
【讨论】:
我假设 Q/A 团队的第一步是解压缩依赖 jar 文件并将其复制到他们自己的 ~/.m2/repository 文件夹并执行 mvn install/package。我说的对吗? @tsar2512 正确。 在此之后如何恢复正常下载? 这似乎下载...大量“编译”和“测试”正常目标 FWIW 不需要的东西...所有插件等...【参考方案2】:离线包部署
您的要求可以通过创建具有完全依赖关系的独立 jar 文件来实现。您可以将其移植到任何地方,请参考https://***.com/a/35359756/5678086
-
如答案中所述构建完整的依赖 JAR 文件
将 JAR 复制到所需的目标计算机
从那里运行以下命令
mvn install:install-file -Dfile=<path-to-file>
这将在目标机器的 maven 存储库中安装依赖项。这是完全离线
【讨论】:
【参考方案3】:理论上,如果您知道您将使用哪些 Maven 命令(打包、安装等),您可以清除您的 ~/.m2/repository
文件夹,在某人的开发箱上运行这些命令一次,然后分发存储库文件夹。您可以运行maven -o install
等,让它不会发出烦人的警告。这可能是比go-offline
答案略小的发行版。
【讨论】:
以上是关于预下载所有依赖项的主要内容,如果未能解决你的问题,请参考以下文章