【问题标题】:How to download jars from Maven Central without writing any pom.xml [duplicate]如何在不编写任何 pom.xml 的情况下从 Maven Central 下载 jars [重复]
【发布时间】:2011-04-05 19:40:15
【问题描述】:

我想要类似下面的东西。

我只想要一个实用程序,它能够从 Maven 存储库下载 jars 及其依赖项,而不会对我的项目的构建方式施加任何限制。

我想要这样的东西:

download-jar --dest=lib/ 'commons-io:commons-io:jar:1.4'

它应该也可以下载依赖项。

更新:

我不知道 pom.xml 应该是结构化的。

我需要完成的唯一任务是下载 jars,我想要一个可以完成这项任务的工具,不会因为多余的信息而困扰我。

有类似的吗?

【问题讨论】:

  • 我不认为这是重复的,因为引用的问题是关于将 deps 提取到本地 m2 存储库,而这个问题通过显示自定义目标 (lib /)。
  • 我完全同意。答案是:mvn -Dartifact=commons-io:commons-io:1.4:jar -DoutputDirectory=$(pwd) -Dpackaging=jar dependency:copy
  • 改进的参数顺序:mvn 依赖:copy -DoutputDirectory=$(pwd) -Dartifact=commons-io:commons-io:1.4:jar

标签: maven-2 java


【解决方案1】:

如果您想将 maven 依赖项下载到您的 lib 目录中,请使用带有 copy-dependencies 函数的依赖项插件。

mvn -DoutputDirectory=./lib -DincludeArtifactIds=commons-logging,commons-io dependency:copy-dependencies 

如果没有 -DincludeArtifactIds 部分,您将下载每个依赖项。

如果您想在没有特定项目的情况下下载工件*见下文**:

mvn -DgroupId=commons-io -DartifactId=commons-io -Dversion=1.4 dependency:get

资源:

关于同一主题:

有趣的 cmets:

  • *@Pascal Thivent:

    无需设置POM,无需开发自己的工具,使用mvn dependency:get。这就是这个问题的正确答案。

【讨论】:

  • 谢谢。这需要有一个合适的 pom.xml。这是我会避免的想法。你知道一种无需定义 pom 即可获得相同结果的方法吗?
  • 制作一个合适的 maven pom.xml 并使用它来下载您的依赖项大约需要 5 分钟。设置一些其他软件并将其配置为抓取库并解析 POM.xmls 以获取依赖项并递归下载这些依赖项将花费相当长的时间。
  • @Chris 无需设置POM,无需开发自己的工具,使用mvn dependency:get
  • @Colin 您需要 2.1 版的依赖插件。关注我对问题的评论the link
  • dependency:get 很棒,但有没有办法将工件下载到特定目录,而不是本地 Maven 存储库?
【解决方案2】:

在收到错误消息后,我还必须指定-DrepoUrl

Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.1:get 
  (default-cli) on project standalone-pom: The parameters 'repositoryUrl' 
  for goal org.apache.maven.plugins:maven-dependency-plugin:2.1:get are 
  missing or invalid -> [Help 1]

所以这是我使用的命令:

mvn -DgroupId=edu.umd -DartifactId=cloud9 -Dversion=1.3.5 \
  -DrepoUrl="http://repo1.maven.org/maven2" dependency:get

此外,-Ddest=~ 不起作用。一直坚持把jar安装到~/.m2/repository

【讨论】:

  • 谢谢!!!这对我很有帮助。不需要pom.xml ;)
  • 命令中间的`\`是什么? -_-
  • "\" 允许将命令复制粘贴到终端或 shell 脚本中。否则,换行符将单独触发每一行的执行。它可能是一条长线,但不幸的是,SO 不使用white-space: pre-wrap,所以太长的线会被切断。
【解决方案3】:

Maven3默认使用依赖插件v2.1:

$ mvn dependency:get -DrepoUrl=http://download.java.net/maven/2/ \
   -DgroupId=commons-io -DartifactId=commons-io -Dversion=1.4

Maven2还是要写规范名的:

$ mvn2 org.apache.maven.plugins:maven-dependency-plugin:2.1:get \
   -DrepoUrl=http://download.java.net/maven/2/ \
   -DgroupId=commons-io -DartifactId=commons-io -Dversion=1.4

使用参数artifact将工件的名称设置为group:artifact:version

$ mvn dependency:get -DrepoUrl=http://download.java.net/maven/2/ \
   -Dartifact=commons-io:commons-io:1.4

使用LATEST下载最新版神器:

$ mvn dependency:get -DrepoUrl=http://download.java.net/maven/2/ \
   -Dartifact=commons-io:commons-io:LATEST

【讨论】:

  • 命令中间的`\`是什么? -_-
  • @IulianOnofrei 与 'mvn' 没有任何关系 :) bash 中使用字符 '\' 来连接被分成两行或多行的命令stackoverflow.com/questions/3871332/…
  • 我明白了,我很恼火,直到我意识到我必须删除它,所以这对没有经验的 Windows 用户来说是一个缺点:(
【解决方案4】:

你应该看看maven dependency plugin,也许……尤其是它的go-offline mojo

【讨论】:

    【解决方案5】:

    看看Ivy。它允许从 maven 存储库中解析依赖项,而没有 maven 本身的过度复杂性。

    【讨论】:

      猜你喜欢
      • 2013-10-28
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 2018-01-01
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      相关资源
      最近更新 更多