Fazendo o download de todas as dependências do maven para um diretório que NÃO está no repositório?

127

Comecei a converter meu projeto em maven porque precisava usar uma biblioteca distribuída em forma binária sobre maven, mas depois de bater minha cabeça contra a parede por muito tempo, decidi parar de me machucar e apenas usar Formiga. Gostaria apenas de fazer o download do jar e de todas as suas dependências transitivas em um diretório de minha escolha, para que eu possa apenas checá-las no meu SCM, como normalmente gosto e ser um desenvolvedor feliz novamente.
Alguma idéia de como fazer isso facilmente?

chubbsondubs
fonte
2
Considere usar o Ivy e obtenha o gerenciamento de dependência transitiva de que você precisa, com o Ant em que você confia. Ou morda o marcador e use a estrutura de diretórios do Maven.
Dave Newton
Você já experimentou Ivy ?
Tomasz Nurkiewicz 26/10/11
5
Não, mas passei toda a minha paciência com a troca neste momento. Talvez na próxima vez. Eu quero voltar à codificação. Isso pode ser feito com maven?
Chubbsondubs 26/10/11

Respostas:

260

O plug-in de dependência maven pode potencialmente resolver seu problema.

Se você possui um pomcom todas as dependências do seu projeto especificadas, tudo o que você precisa fazer é executar

mvn dependency:copy-dependencies

e você encontrará a target/dependenciespasta preenchida com todas as dependências, incluindo transitivas.

Adicionando a resposta de Gustavo a partir de baixo : Para baixar as fontes de dependência , você pode usar

mvn dependency:copy-dependencies -Dclassifier=sources

(via doc do Apache Maven Dependency Plugin ).

Raghuram
fonte
1
Thx @Raghuram, eu procuro isso há séculos.
Eskalera 7/11
mas e se eu quiser copiar todas as dependências para meu repositório local? Isso é para ser usado? Por que copiar se talvez já esteja no repositório local. É local de qualquer maneira.
ses
1
@ses Uma compilação maven padrão (por exemplo, compilar, testar, empacotar, instalar, etc .; não tem certeza sobre a validação) já copia todas as dependências para o seu repositório local por padrão. Isto não é para isso. Em vez disso, é para situações em que você precisa das dependências do seu aplicativo por qualquer motivo. Estou usando agora para inspecionar as bibliotecas dependentes em busca de definições de API redundantes (por exemplo, algumas bibliotecas incluem APIs Javax, que podem entrar em conflito com outras versões da mesma API), mas também é bom se seu aplicativo precisar de suas dependências incluídas. para distribuição, ou qualquer outra coisa.
precisa saber é o seguinte
1
+1 para uma resposta clara, concisa e útil. Acabei de passar pela mesma dança do Maven que o OP e só queria recuperar as dependências do arquivo JAR. Obrigado! Eu gostaria de poder +10
Brandon
@Raghuram Tecnicamente, você acaba com todos os artefatos (resolvidos) em "destino / dependências". Além disso, existe o possível problema de colisões de nomes, pois a coordenada "groupId" de uma dependência é ignorada. Em outras palavras, "dependência: dependências de cópia" não preserva a estrutura do layout.
Whaefelinger # 25/14
8

Com base na resposta do @Raghuram , encontro um tutorial sobre Copiando dependências do projeto , Apenas:

  1. Abra o pom.xmlarquivo do seu projeto e encontre o seguinte:

    <project>
      [...]
      <build>
        <plugins>
          ...
        </plugins>
      </build>
      [...]
    </project>
  2. Em seguida, substitua <plugins> ... </plugins>por:

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>false</overWriteSnapshots>
              <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  3. E ligue para o maven dentro da linha de comando mvn dependency:copy-dependencies

Após o término, ele criará a pasta target/dependencydentro de todas as jardependências do diretório atual em que pom.xmlresidem.

do utilizador
fonte
Onde digito o comando "mvn"? Clique com o botão direito do mouse em maven-project-> Maven -> .. ??
precisa saber é o seguinte
Em uma linha de comando do terminal na pasta em que o pom.xmlarquivo está.
usuário
1
Não funcionou. Eu acho que o Maven está instalado apenas como um plugin. Eu tive que baixar manualmente o Maven também. Então mvn dependency:copy-dependenciestrabalhou!
Baked Inhalf
8

Eu finalmente descobri como usar o Maven. No Eclipse, crie um novo projeto Maven.

Faça o download do Maven, extraia o arquivo, adicione o /bin pasta ao caminho.

Valide a instalação da linha de comandos executando mvn -v (imprimirá a versão e o caminho da instalação em java)

Mude para a pasta raiz do projeto (onde pom.xmlestá localizada) e execute:

mvn dependency:copy-dependencies

Todos os arquivos jar são baixados para /target/dependency.

Para definir outro diretório de saída:

mvn dependency:copy-dependencies -DoutputDirectory="c:\temp"

Agora é possível reutilizar este projeto Maven para todos os downloads de dependência, alterando o pom.xml

Adicione jars ao projeto java pelo caminho da construção -> configure o caminho da construção -> bibliotecas -> adicione JARs ..

Inhalf assado
fonte
1
Não precisa necessariamente ser um projeto de eclipse. Abri um arquivo jar no Java Decompiler e copiei o pom.xml para uma pasta vazia. Liguei mvn dependency:copy-dependenciescomo você descreveu nessa pasta e copiei todos os arquivos jar dependentes para uma única pasta.
Bernhard Döbler
4

Eu encontrei o próximo comando

mvn dependency:copy-dependencies -Dclassifier=sources

aqui maven.apache.org

Gustavo
fonte
2

Por favor, verifique se você possui alguns arquivos de configuração no ${MAVEN_HOME}/confdiretório like settings.xml. Esses arquivos substituem as configurações da .m2pasta e, por isso, a pasta do repositório .m2pode não estar visível ou descartada.

MagGGG
fonte