Posso instalar um artefato install:install-file
, mas como posso fazer o download de um artefato?
Por exemplo:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Posso instalar um artefato install:install-file
, mas como posso fazer o download de um artefato?
Por exemplo:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
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:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get \
-DrepoUrl=url \
-Dartifact=groupId:artifactId:version
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:
<usePluginRegistry>true</usePluginRegistry>
2. Adicione o arquivo ~/.m2/plugin-registry.xml
com o seguinte conteúdo:
<?xml version="1.0" encoding="UTF-8"?>
<pluginRegistry xsi:schemaLocation="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0 http://maven.apache.org/xsd/plugin-registry-1.0.0.xsd"
xmlns="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<useVersion>2.1</useVersion>
<rejectedVersions/>
</plugin>
</plugins>
</pluginRegistry>
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ás dependency:get
).
:jar:sources
ao artefato , consulte stackoverflow.com/a/31109185/537554
mvn 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:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]]
onde groupId:artifactId:version
, etc., estão as coordenadas do Maven
Um exemplo, testado com o Maven 2.0.9, Maven 2.2.1 e Maven 3.0.4:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=org.hibernate:hibernate-entitymanager:3.4.0.GA:jar:sources
(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.)
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:
mvn dependency:get \
-DrepoUrl=http://.../ \
-Dartifact=com.foo.something:component:LATEST:jar \
-Dtransitive=false \
-Ddest=component.jar \
-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 de copy
after da seguinte get
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
(sem dependency: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:
mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources
por exemplo
mvn dependency:get -Dartifact=junit:junit:4.12:jar:sources
Isso funciona porque o artifact
parâmetro realmente consiste em groupId:artifactId:version[:packaging][:classifier]
. Apenas a embalagem e o classificador são opcionais.
Com jar
o empacotamento e sources
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.
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.
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=junit:junit:4.11 -DoutputDirectory=/tmp -Dmdep.stripVersion=true
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)
um liner para baixar o artefato mais recente do maven sem mvn:
curl -O -J -L "https://repository.sonatype.org/service/local/artifact/maven/content?r=central-proxy&g=io.staticcdn.sdk&a=staticcdn-sdk-standalone-optimizer&e=zip&v=LATEST"
O uso da documentação oficial:
https://maven.apache.org/plugins/maven-dependency-plugin/usage.html#dependency:get
Para o meu caso, veja a resposta abaixo:
mvn dependency:get -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false
mvn dependency:copy -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false -DoutputDirectory=$6
#mvn dependency:get -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false
#mvn dependency:copy -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false -DoutputDirectory=.
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"
Aqui está um exemplo para obter o ASM-7 usando o Maven 3.6:
mvn dependency:get -DremoteRepositories=maven.apache.org -Dartifact=org.ow2.asm:7.0:sources:jar
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,
mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar
O comando:
mvn install:install-file
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.