2012-02-23 55 views
1

注:Maven的依赖关系的插件不适合这里下面如何从CLI(不在项目目录中)下载Maven工件及其依赖项的Java源代码?

我部署项目附带源artifactory的规定的原因。我希望能够运行命令来下载和解压给定工件及其依赖项的源代码。我将用这个来区分神器的两个版本。

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

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

试过结合一对夫妇从Maven的依赖,插件的目标,但是这似乎并不能够做什么,我需要:

  • :解压依赖性需要一个项目
  • :让要求我明确指定的远程回购。为什么不能在我的settings.xml中使用它们?

我试着写我自己的魔力要做到这一点,但我狼狈,因为我似乎无法获得一个句柄远程仓库,除非我在一个项目目录来的。因此我无法下载该项目。即使我已经下载了项目,mojo已经初始化了它的$ {project},因此我将无法获得它的依赖关系等。

希望得到您的帮助。

回答

0

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

下面的例子下载从Maven的中央常春藤,然后用它来下载公地郎源的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]" 
+0

谢谢,很方便,虽然因为提出这个问题,我已经开始写一个Maven插件做什么,我需要。将在github上分享,并将链接发回到这里。 – 2012-02-24 10:39:53

0

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

  • 一个那得到你的人造物体
  • 一个让你的人造物体pom
  • 和一个使用它的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=. 
相关问题