【问题标题】:How to download all possible maven dependencies so they are local如何下载所有可能的 Maven 依赖项,以便它们是本地的
【发布时间】:2015-07-07 18:20:55
【问题描述】:

我在一个非常庞大的防火墙后面工作,该防火墙喜欢在随机连接上打嗝,这使得所有使用远程存储库的工作对我来说都是一场噩梦!

我正在寻找一个来自 Git 的项目(这个 https://github.com/mrniko/netty-socketio),它大量使用 maven 来下载依赖项。

我想做的是在另一个终端上(比如http://cloud9.io什么的)下载所有的maven依赖,这样整个项目就可以独立运行了。

我已经尝试过mvn clean install 然后压缩源文件夹,但实际上还不够!当我尝试在 Eclipse 中本地运行项目时,我仍然收到与 ClassNotFound 相关的错误。作为记录,我确实在构建属性中添加了已编译的 *.class 文件,因此 Eclipse 知道它们在哪里。似乎有一些动态生成的随机类仍然不存在(例如 log4j——我真的不想单独寻找每个类)

我想知道是否有一种完全彻底的方法可以从 maven 下载所有可能的依赖项,然后 100% 独立运行项目,或者从中创建本地 maven 服务器?

我在 Eclipse Luna 上运行 Java 7,并且在我的 Windows 7 机器上安装了 Maven(尽管它几乎不能在远程存储库上运行)。我还有一个 Cloud9 实例,可用于运行 Maven 命令,然后压缩结果以供本地下载。

【问题讨论】:

  • 如果你得到 ClassNotFound 异常,这不是来自未下载的依赖项。我可能来自已下载的依赖项,但不包含它应该包含的类,如 @StuPointerException 所述

标签: java eclipse git maven cloud9-ide


【解决方案1】:

当您执行mvn clean install 时,maven 会将当前构建的项目的所有依赖项下载到您的本地 maven 存储库。这通常位于

%USERPROFILE%\.m2\repository

当您构建项目时,maven 使用该路径来查找所需的依赖项。

如果您想全部下载,可以尝试使用mvn dependency:copy-dependencies。然后,您将在项目的target/dependencies 目录中找到所有项目依赖项。这也包括传递依赖。

要将它们全部添加为 Eclipse 依赖项,您可能需要尝试maven-eclipse-plugin。使用该插件,您可以使用mvn eclipse:eclipse 命令生成eclipse .project 和.classpath 文件。这将使用来自 maven 的所需依赖项填充 eclipse 文件。然后,您应该使用 将现有项目导入工作区 将项目导入 eclipse,而不是 导入现有的 maven 项目。

maven-eclipse-plugin 将添加相对于M2_REPO 变量指定的文件夹的所有这些 jar。只要确保你在 eclipse 项目属性中编辑了这个变量,你就应该被设置。

【讨论】:

  • 太棒了!这在下载所有数百个 .jar 文件时起作用!但现在我需要将它们全部包含在我的 Eclipse 构建中。有没有快速的方法来做到这一点?将.jar库添加到eclipse中的标准方法是一个一个。
  • 用生成 Eclipse 项目文件的描述更新了答案。
  • 对于M2_REPO,您是否只是将该值添加到Eclipse 的Linked Resources 部分?如果是这样......它似乎没有工作,虽然我只是使用在mvn clean install 和mvn dependency:copy-dependencies 之后创建的目标目录---我看到这样的位置M2_REPO/org/slf4j/slf4j-simple/1.7.7/slf4j-simple-1.7.7.jar 我不确定在哪里/org/slf4j.../ 部分来自因为所有依赖项都在 target\dependency 目录中。
  • 好吧,我实际上不得不创建一个M2_REPO_2 变量,因为我无法更改原始变量。我确实最终更新了路径,现在它运行了!非常感谢!!
  • 顺便说一句,通过mvn dependency... 调用,有没有办法确保源代码是用.class 文件编译的,或者至少是javadoc?
【解决方案2】:

我不得不处理类似的问题。我会发现由于防火墙策略的更改,有时我项目中的所有 .jar 文件都已更新为 1K 文件,当在 notepad++ 中打开该文件时,会包含来自防火墙的消息,指出下载已被阻止。

我建议您使用 Nexus 来管理您的本地存储库,这意味着您的本地项目不必通过防火墙来检查 maven 更新。

http://www.andrejkoelewijn.com/blog/2010/03/09/getting-started-with-nexus-maven-repository-manager/

【讨论】:

    【解决方案3】:

    使用依赖插件go-offline任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-29
      • 2020-03-03
      • 2016-09-30
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      相关资源
      最近更新 更多