草庐IT

java - 获取所有 Maven 依赖项,包括插件依赖项

coder 2023-05-27 原文

我正在尝试让 maven 下载所有依赖项(编译、测试、插件等),这样我就可以避免让我们的 dockerized 构建浪费不必要的时间一遍又一遍地下载它们。

我们已经对我们的 maven 构建进行了 docker 化,这样我们就可以从我们的 jenkins 运行它,而无需在 jenkins 机器上安装大量构建特定的依赖项(Java、redis、maven 依赖项等)。我们的构建依赖于增量 docker 构建,它只执行实际需要重新运行的步骤。

我们的主要构建是一个DockerFile,它有几个步骤来安装jdk、maven等。然后它做了一个

复制 ./pom.xml/opt/inbot-api/pom.xml 运行 mvn 依赖项:复制依赖项清理

这会将依赖项下载到本地 maven 存储库,然后清除目标目录。

然后我们将源代码树复制到镜像并运行完整的构建。

复制 ./src/opt/inbot-api/src 运行 mvn -e 全新安装

一般的想法是,在干净的机器上,docker 将执行所有的 RUN 步骤,但在增量构建上它只会重新运行需要重新运行的东西。在每个运行步骤之后,它都会存储一个中间图像。因此,如果 pom 文件没有更改,则无需重新运行依赖项获取步骤,因为它会产生完全相同的结果。因此,它会加载已下载的所有依赖项的缓存中间镜像。这正是我们想要的。

我们的 DockerFile 有很多东西在这里并不那么相关,但最终它会生成一个 docker 文件,其中包含我们编译的 Artifact 、一个 nginx 配置和我们可以部署到 ECS 的所有运行时依赖项。

这几乎可以工作,除了 mvn clean install 仍然会在每次构建时下载额外的插件依赖项。因此,这些是复制依赖项步骤未涵盖的依赖项。

我的问题,如何让 RUN mvn dependency:copy-dependencies clean 下载所有依赖项,包括插件依赖项。我见过人们实际上做了一个 mvn verify clean 而不是 mvn dependency:copy-dependencies clean 但在我们的例子中这有点慢。我想知道是否有更好的方法来做到这一点。

如果有任何关于如何改进的反馈,我将不胜感激。

更新

我现在做一个

运行 mvn -B -T 4 依赖项:复制依赖项依赖项:解析插件依赖项:go-offline clean

之后,它仍然使用 mvn clean install 下载更多内容。 mvn -o clean install 仍然失败,尽管 dependency:go-offline。所以,这个插件好像坏了。

最佳答案

这对我有用,无需下载其他依赖项:

RUN mvn -B dependency:resolve dependency:resolve-plugins

关于java - 获取所有 Maven 依赖项,包括插件依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34203179/

有关java - 获取所有 Maven 依赖项,包括插件依赖项的更多相关文章

  1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  2. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  3. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  4. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  5. ruby-on-rails - 在 ruby​​ .gemspec 文件中,如何指定依赖项的多个版本? - 2

    我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这

  6. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  7. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  8. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  9. ruby - 简单获取法拉第超时 - 2

    有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url

  10. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

随机推荐