Uma linha de comando simples para baixar um artefato remoto do maven2 no repositório local?

122

Eu tenho uma biblioteca que distribuo usando o maven 2. O usuário típico dessa biblioteca não usa o maven para criar seus aplicativos, mas provavelmente está familiarizado com o maven e provavelmente o instalou.

Gostaria de documentar um comando "simples" de uma linha que eles possam usar para baixar os artefatos da minha biblioteca para o local deles, ~/.m2/repositorysem exigir que eles configurem um pom.xml para fazer isso.

Eu achava que havia uma maneira de fazer isso, mas eu não consigo encontrá-lo depois de olhar através do install:install-filee dependencydocumentação plugin. Eu tentei coisas como:

mvn install:install-file -DrepositoryId=java.net -Durl=http://download.java.net/maven/2/ -Dfile=robo-guice-0.4-20091121.174618-1.jar -DpomFile=robo-guice-0.4-20091121.174618-1.pom -DgroupId=robo-guice -DartifactId=robo-guice -Dversion=0.4-SNAPSHOT -Dpackaging=jar

mas acho que estou latindo na árvore errada, pois parece que o plug-in de instalação é usado para copiar arquivos criados localmente no repositório local, em vez de baixar artefatos remotos no repositório local.

Este é o artefato que eu gostaria de instalar: http://download.java.net/maven/2/robo-guice/robo-guice/0.4-SNAPSHOT/

Isso é possível usando o maven?

empapar
fonte

Respostas:

168

Desde a versão 2.1 do Maven Dependency Plugin , existe uma dependência: get goal para esse fim. Para garantir que você esteja usando a versão correta do plug-in, será necessário usar o "nome completo":

mvn org.apache.maven.plugins: maven-dependency-plugin: 2.1: get \
    -DrepoUrl = http: //download.java.net/maven/2/ \
    -Dartifato = robo-guice: robo-guice: 0.4-INSTANTÂNEO
Pascal Thivent
fonte
Mais útil para mostrar como instalar o próprio plugin de dependência.
Sergio Acosta
2
Pascal, você pode me dizer como definir usuário + senha para acessar o repositório? O truque com o usuário: senha @ repourl não funcionou.
Gábor Lipták
4
o objetivo é bom, mas como posso definir o diretório de destino para o qual quero copiar o arquivo? (e nome do arquivo)
domi 16/06
9
@domi (resposta tardia para a posteridade): use "-Ddest = caminho / para / my.jar"; caso contrário, é apenas copiado para o seu local ~ / .m2 / repositório (faz parecer que nada aconteceu). Consulte maven.apache.org/plugins/maven-dependency-plugin/… = exemplo => mvn org.apache.maven.plugins: maven-dependency-plugin: 2.5.1: get -DremoteRepositories = repo.maven.apache.org -Dartifact = org.apache.ant: ant: 1.8.1 -Ddest = ant-1.8.1.jar (resultado: ant-1.8.1.jar no diretório atual)
michael
3
Obrigado! Enquanto, no link do documento que você postou, existe Deprecated. Use remoteRepositoriespara repoUrl. Atualize a resposta, talvez :)
Final de semana
46

Dê a eles um pompo trivial com esses jars listados como dependências e instruções para executar:

mvn dependency:go-offline

Isso puxará as dependências para o repositório local.

Uma solução mais direta é a dependência: get , mas há muitos argumentos para digitar:

mvn dependency:get -DrepoUrl=something -Dartifact=group:artifact:version
bmargulies
fonte
Boa ideia, apesar de uma linha de comando que eles poderiam copiar e colar seria mais fácil
emmby
Se eu pudesse pensar em um, eu o publicaria. Não conheço nenhum plugin que faça exatamente o que é necessário. Eu sei como escrever um ...
bmargulies
O getmojo realmente espera -DrepoUrlestar presente, não -DrepositoryUrl. Em relação aos argumentos para digitar, não há mágica, você precisa fornecer essas informações de uma maneira ou de outra.
22610 Pascal Thivent
No meu primeiro esquema, o usuário final digita apenas três caracteres: mvn. Todas as outras digitações são feitas pelo op.
22789 bmargulies
22

A partir da versão 2.4 do Maven Dependency Plugin , você também pode definir um destino de destino para o artefato usando o sinalizador -Ddest. Ele deve apontar para um nome de arquivo (não um diretório) para o artefato de destino. Consulte a página de parâmetros para obter parâmetros adicionais que podem ser usados

mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get \
    -DremoteRepositories=http://download.java.net/maven/2 \
    -Dartifact=robo-guice:robo-guice:0.4-SNAPSHOT \
    -Ddest=c:\temp\robo-guice.jar
Eric B.
fonte
2
Obrigado! -Ddest está marcado como obsoleto. Existe uma nova solução nova?
Dimath
1
Use dependência: copie a meta. maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html
Eric B.
3
o objetivo de cópia não copia deps transitivos.
Renato