Cuidado que o plugin deseja 'repoUrl', apesar da documentação dizendo 'repositoryUrl'. Pode deixá-lo louco, como aconteceu comigo!
Zakmck
os documentos ( maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html ) mostram os parâmetros xml (<repositoryUrl> ... </repositoryUrl>) e as propriedades do usuário da linha de comando (mvn .. . -DrepoUrl = "..."). Este exemplo em particular está obsoleto, então não se preocupe; agora é agora uniformemente remoteRepositories (nos dois usos); mas observe que o parâmetro "destination" é a propriedade do usuário "-Ddest = ..."; eg => 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
Respostas:
182
Você pode usar o plugin de dependência maven, que tem um bom dependency:getobjetivo desde a versão 2.1. Não há necessidade de um pom, tudo acontece na linha de comando.
Para ter certeza de encontrar o dependency:getobjetivo, você precisa dizer explicitamente ao maven para usar a versão 2.1, ou seja, você precisa usar o nome completo do plug-in, incluindo a versão:
ATUALIZAÇÃO: Nas versões mais antigas do Maven (anteriores à 2.1), é possível executar dependency:getnormalmente (sem usar o nome e a versão completos) forçando sua cópia do maven a usar uma versão específica de um plug-in.
Isso pode ser feito da seguinte forma:
1. Adicione a seguinte linha ao <settings>elemento do seu ~/.m2/settings.xmlarquivo:
<usePluginRegistry>true</usePluginRegistry>
2. Adicione o arquivo ~/.m2/plugin-registry.xmlcom o seguinte conteúdo:
Mas isso não parece mais funcionar com o maven 2.1 / 2.2. Na verdade, de acordo com a Introdução ao registro do plug-in , os recursos do plugin-registry.xmlforam redesenhados (para portabilidade) e o registro do plug - in está atualmente em um estado semi-inativo no Maven 2 . Então, acho que temos que usar o nome longo por enquanto (ao usar o plug-in sem pom, que é a ideia por trás dependency:get).
Sim, e eu tenho a mesma resolução usando a dependência: obter objetivo. dependência do mvn: get -Dartifact = org.apache.archiva: archiva-webapp: ÚLTIMO: guerra -DrepoUrl = repository.sonatype.org/content/repositories/central O único inconveniente é que devo fornecer uma opção de repoUrl. Suas informações realmente ajudam, estou usando o mvn 2.2.1 (rdebian-1) e não toquei no pluginRegistry. Obrigado.
Qual é a diferença entre obter e instalar? Os dois não buscam o seu repositório de maven local? --edit: espere, não, eu entendi agora; install é para que seus deps locais sejam copiados para o repositório m2 local, obtenha-os em um controle remoto.
(Obrigado a Pascal Thivent por fornecer sua maravilhosa resposta em primeiro lugar. Estou adicionando outra resposta, porque ela não caberia em um comentário e seria muito extensa para uma edição.)
Eu usei isso para baixar o arquétipo do maven. Isso funciona muito bem se você estiver atrás do proxy e trabalhando com o eclipse, que falha ao se registrar para identificar os arquétipos do maven, mesmo que você tenha configurado o proxy nas configurações xml.
Você pode explicar o que jar:sourcessignifica / faz? por que você precisa especificar "jar"? e "fontes" significa que ele fará download de dependências adicionais que o artefato exige?
red888
"jar" é o tipo de embalagem, "sources" é o classificador. Dada uma dependência (por exemplo, núcleo de hibernação ), pode haver mais de um artefato. Freqüentemente, existem: 1. a biblioteca somente binária, 2. sources, um arquivo JAR contendo apenas fontes Java, 3. javadoc, um arquivo JAR apenas com documentos da API. Consulte também: Manipuladores de artefatos padrão do Maven .
Danilo Piazzalunga
Obrigado por esclarecer como usar o [:classifier]corretamente, se eu tiver um arquivo zip criado pelo plugin assemlby que eu quero baixar.
jonashackt 03/04
43
Aqui está o que funcionou para mim para fazer o download da versão mais recente de um artefato chamado "component.jar" com o Maven 3.1.1 no final (outras sugestões não o fizeram, principalmente devido a alterações na versão do maven, acredito)
Na verdade, ele baixa o arquivo e o copia no diretório de trabalho local
Ótimo, obrigado! Eu não precisava do evento -DrepoUrl, acho que estava implícito no meu pom de qualquer maneira. Também eu não utilizar -Ddestcomo I realmente fez falta a ele baixar a regular .m2diretório.
yair
15
O destparâmetro foi descontinuado e pode ser substituído por uma invocação de copyafter da seguinte getmaneira:mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=. (neste caso, colocando o jar no diretório de trabalho).
Jacob Raihle 8/08/16
@JacobRaihle Então eu não posso baixar arquivo sem pom.xml, recebendo o seguinte erro: Goal requires a project to execute but there is no POM in this directory.
Athlan
2
O suporte a Athlan No-pom pode ser um recurso mais recente, suponho. Hoje em dia eu posso apenas correr mvn dependency:copy(sem dependency:getprimeiro).
Jacob Raihle
26
Com relação a como obter o binário do artefato, a resposta de Pascal Thivent é essa, mas também para obter o jar das fontes do artefato, podemos usar:
Isso funciona porque o artifactparâmetro realmente consiste em groupId:artifactId:version[:packaging][:classifier]. Apenas a embalagem e o classificador são opcionais.
Com jaro empacotamento e sourceso classificador , o plug-in de dependência maven entende que estamos solicitando o jar de fontes, não o jar de artefatos.
Infelizmente, por enquanto, os arquivos jar de fontes não podem ser baixados transitivamente, o que faz sentido, mas, idealmente, acredito que também pode respeitar a opção, downloadSourcesassim como o plugin maven eclipse.
Pode-se usar dependência: copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ), que pega uma lista de artefatos definidos na seção de configuração do plug-in e os copia para um local especificado , renomeie-os ou retire a versão, se desejar. Esse objetivo pode resolver os artefatos de repositórios remotos se eles não existirem no repositório local ou no reator.
Nem todas as propriedades do plug-in podem ser usadas no maven CLI. As propriedades que possuem a propriedade "User Property:" definida podem ser especificadas. No exemplo abaixo, estou baixando junit para minha pasta temp e removendo a versão do arquivo jar.
onde artefato = junit: junit: 4.11 são as coordenadas do maven. E você especifica artifcat como groupId: artifactId: version [: packaging [: classifier]]
Use o comando "mvn dependency: get" para baixar um item específico e use o comando "mvn dependency: copy" para copiar o artefato baixado no diretório de destino "-DoutputDirectory"
Normalmente instala o artefato em seu repositório local, portanto você não precisa fazer o download. No entanto, se você deseja compartilhar seu artefato com outras pessoas, será necessário implantar o artefato em um repositório central, consulte o plug-in de implantação - para obter mais detalhes.
Além disso, adicionar uma dependência ao seu POM buscará automaticamente todos os artefatos de terceiros necessários ao criar seu projeto. Ou seja, isso fará o download do artefato do repositório central.
Respostas:
Você pode usar o plugin de dependência maven, que tem um bom
dependency:get
objetivo desde a versão 2.1. Não há necessidade de um pom, tudo acontece na linha de comando.Para ter certeza de encontrar o
dependency:get
objetivo, você precisa dizer explicitamente ao maven para usar a versão 2.1, ou seja, você precisa usar o nome completo do plug-in, incluindo a versão:ATUALIZAÇÃO: Nas versões mais antigas do Maven (anteriores à 2.1), é possível executar
dependency:get
normalmente (sem usar o nome e a versão completos) forçando sua cópia do maven a usar uma versão específica de um plug-in.Isso pode ser feito da seguinte forma:
1. Adicione a seguinte linha ao
<settings>
elemento do seu~/.m2/settings.xml
arquivo:2. Adicione o arquivo
~/.m2/plugin-registry.xml
com o seguinte conteúdo:Mas isso não parece mais funcionar com o maven 2.1 / 2.2. Na verdade, de acordo com a Introdução ao registro do plug-in , os recursos do
plugin-registry.xml
foram redesenhados (para portabilidade) e o registro do plug - in está atualmente em um estado semi-inativo no Maven 2 . Então, acho que temos que usar o nome longo por enquanto (ao usar o plug-in sem pom, que é a ideia por trásdependency:get
).fonte
:jar:sources
ao artefato , consulte stackoverflow.com/a/31109185/537554mvn dependency:get -Dartifact=group-id:artefact-id:version
Com a versão mais recente (2.8) do Maven Dependency Plugin , o download de um artefato do Maven Central Repository é tão simples quanto:
onde
groupId:artifactId:version
, etc., estão as coordenadas do MavenUm exemplo, testado com o Maven 2.0.9, Maven 2.2.1 e Maven 3.0.4:
(Obrigado a Pascal Thivent por fornecer sua maravilhosa resposta em primeiro lugar. Estou adicionando outra resposta, porque ela não caberia em um comentário e seria muito extensa para uma edição.)
fonte
jar:sources
significa / faz? por que você precisa especificar "jar"? e "fontes" significa que ele fará download de dependências adicionais que o artefato exige?sources
, um arquivo JAR contendo apenas fontes Java, 3.javadoc
, um arquivo JAR apenas com documentos da API. Consulte também: Manipuladores de artefatos padrão do Maven .[:classifier]
corretamente, se eu tiver um arquivo zip criado pelo plugin assemlby que eu quero baixar.Aqui está o que funcionou para mim para fazer o download da versão mais recente de um artefato chamado "component.jar" com o Maven 3.1.1 no final (outras sugestões não o fizeram, principalmente devido a alterações na versão do maven, acredito)
Na verdade, ele baixa o arquivo e o copia no diretório de trabalho local
Do bash:
fonte
-DrepoUrl
, acho que estava implícito no meu pom de qualquer maneira. Também eu não utilizar-Ddest
como I realmente fez falta a ele baixar a regular.m2
diretório.dest
parâmetro foi descontinuado e pode ser substituído por uma invocação decopy
after da seguinteget
maneira:mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.
(neste caso, colocando o jar no diretório de trabalho).Goal requires a project to execute but there is no POM in this directory
.mvn dependency:copy
(semdependency:get
primeiro).Com relação a como obter o binário do artefato, a resposta de Pascal Thivent é essa, mas também para obter o jar das fontes do artefato, podemos usar:
por exemplo
Isso funciona porque o
artifact
parâmetro realmente consiste emgroupId:artifactId:version[:packaging][:classifier]
. Apenas a embalagem e o classificador são opcionais.Com
jar
o empacotamento esources
o classificador , o plug-in de dependência maven entende que estamos solicitando o jar de fontes, não o jar de artefatos.Infelizmente, por enquanto, os arquivos jar de fontes não podem ser baixados transitivamente, o que faz sentido, mas, idealmente, acredito que também pode respeitar a opção,
downloadSources
assim como o plugin maven eclipse.fonte
Pode-se usar dependência: copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ), que pega uma lista de artefatos definidos na seção de configuração do plug-in e os copia para um local especificado , renomeie-os ou retire a versão, se desejar. Esse objetivo pode resolver os artefatos de repositórios remotos se eles não existirem no repositório local ou no reator.
Nem todas as propriedades do plug-in podem ser usadas no maven CLI. As propriedades que possuem a propriedade "User Property:" definida podem ser especificadas. No exemplo abaixo, estou baixando junit para minha pasta temp e removendo a versão do arquivo jar.
onde artefato = junit: junit: 4.11 são as coordenadas do maven. E você especifica artifcat como groupId: artifactId: version [: packaging [: classifier]]
(Obrigado a Pascal Thivent por fornecer seu https://stackoverflow.com/a/18632876/2509415 em primeiro lugar. Estou adicionando outra resposta)
fonte
um liner para baixar o artefato mais recente do maven sem mvn:
fonte
O uso da documentação oficial:
Para o meu caso, veja a resposta abaixo:
Use o comando "mvn dependency: get" para baixar um item específico e use o comando "mvn dependency: copy" para copiar o artefato baixado no diretório de destino "-DoutputDirectory"
fonte
Aqui está um exemplo para obter o ASM-7 usando o Maven 3.6:
Ou você pode fazer o download do jar aqui: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm e, em seguida,
fonte
O comando:
Normalmente instala o artefato em seu repositório local, portanto você não precisa fazer o download. No entanto, se você deseja compartilhar seu artefato com outras pessoas, será necessário implantar o artefato em um repositório central, consulte o plug-in de implantação - para obter mais detalhes.
Além disso, adicionar uma dependência ao seu POM buscará automaticamente todos os artefatos de terceiros necessários ao criar seu projeto. Ou seja, isso fará o download do artefato do repositório central.
fonte
LATEST
está obsoleto, tente com o intervalo[,)
fonte