如何从CLI(不在项目目录中)下载Maven工件及其依赖项的Java源代码?

时间:2012-02-23 12:00:44

标签: maven maven-3 artifactory maven-dependency-plugin

注意:由于以下原因,maven-dependency-plugin不适合

我正在将项目部署到Artifactory,附带来源。我希望能够运行命令来下载和解压缩给定工件及其依赖项的源代码。我将使用它来区分两个版本的工件。

我想做的基本上是这样的:

mvn extract:sources -DgroupId=[groupId] -DartifactId=[artifactId] -Dversion=[version]

尝试结合maven-dependency-plugin中的几个目标,但这似乎无法满足我的需求:

  • :unpack-dependencies 需要一个项目
  • :get 要求我明确指定远程仓库。为什么不能在我的settings.xml中使用它们?

我已经尝试编写自己的mojo来做这件事,但是我感到很沮丧,因为除非我在项目目录中,否则我似乎无法处理远程存储库。因此我无法下载该项目。甚至一旦我下载了项目,mojo就已经初始化了它的$ {project}因此我将无法获得它的依赖等等

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

apache ivy jar可以用作CLI program来下载Maven工件。

以下示例从Maven Central下载常春藤,然后使用它来下载commons-lang源jar:

wget -O ivy.jar \
     http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.2.0/ivy-2.2.0.jar

java -jar ivy.jar \
     -dependency commons-lang commons-lang 2.6 \
     -confs sources \
     -retrieve "[artifact](-[classifier]).[ext]"

答案 1 :(得分:0)

我发现最好的是使用3个maven命令:

  • 得到你的人工制品
  • 获得你的艺术品的人
  • 和使用其pom
  • 获取其依赖关系的那个

这是一个bash片段:

#!/bin/bash

DIR=some/dir
ARTEFACT_ID=your-artefact
GROUP_ID=com.your.group.id
VERSION=1.7
ARTEFACT=${GROUP_ID}:${ARTEFACT_ID}:${VERSION}

rm -fR $DIR

mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy \
  -Dartifact=$ARTEFACT \
  -DoutputDirectory=$DIR

# now get the pom: it will be needed by the copy-dependencies goal
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy \
  -Dartifact=$ARTEFACT:pom \
  -DoutputDirectory=$DIR

mvn -f ${DIR}/${ARTEFACT_ID}-${VERSION}.pom org.apache.maven.plugins:maven-dependency- plugin:2.8:copy-dependencies \
  -DoutputDirectory=.