Como configuro o Maven para desenvolvimento offline?


117

O maven requer uma conexão com a internet em algum ponto para poder usá-lo? O que significa obter especificamente os plug-ins internos do maven para compilar, limpar, empacotar, etc?


Você tem alguma máquina com acesso à internet? Talvez um servidor?
Marcelo

2
Nós fazemos, mas levar as coisas de lá para o ambiente de desenvolvimento é entediante.

Respostas:


163

Você pode executar o maven no modo offline mvn -o install. É claro que quaisquer artefatos não disponíveis em seu repositório local irão falhar. O Maven não se baseia em repositórios distribuídos, mas eles certamente tornam as coisas mais fáceis. É por esse motivo que muitas lojas usam espelhos internos que são sincronizados de forma incremental com os repositórios centrais.

Além disso, mvn dependency:go-offlinepode ser usado para garantir que todas as dependências estejam instaladas localmente antes de começar a trabalhar offline.


Em consonância com esta resposta, descobri que o mvn vem com seus plugins "principais" (ou seja, compilador). Assim, com o mvn install posso obter o que preciso.

8
Considere também que você pode usar "mvn dependency: go-offline" para garantir que todas as dependências referidas em seu pom.xml estejam presentes em seu repositório local.
Thorbjørn Ravn Andersen

10
Infelizmente, mvn dependency:go-offlinesimplesmente não pega tudo. Dentro de uma nova máquina virtual, por exemplo, meu projeto ainda deve baixar coisas, mesmo depois de executar esse objetivo. Veja também esta edição .
phs

2
Minha experiência mostra que a opção -o não funciona corretamente e que a meta de ficar offline está longe de ser suficiente para permitir uma compilação offline completa: Veja a solução que encontrei aqui: stackoverflow.com/q/43661755/1767316
user1767316

Se você adicionar o sinalizador -llr adicionalmente a -o, ele deve funcionar.
Udo

10

Se você tiver um PC com acesso à Internet em sua LAN, deverá instalar um repositório Maven local.

Eu recomendo Artifactory Open Source . Isso é o que usamos na nossa organização, é muito fácil de configurar.

Artifactory atua como um proxy entre sua ferramenta de construção (Maven, Ant, Ivy, Gradle etc.) e o mundo externo.

Ele armazena em cache artefatos remotos para que você não precise baixá-los repetidamente.

Ele bloqueia solicitações externas indesejadas (e às vezes sensíveis à segurança) para artefatos internos e controla como e onde os artefatos são implantados e por quem.

Depois de configurar o Artifactory, você só precisa alterar o Maven settings.xmlnas máquinas de desenvolvimento:

<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <mirrors>
    <mirror>
      <mirrorOf>*</mirrorOf>
      <name>repo</name>
      <url>http://maven.yourorganization.com:8081/artifactory/repo</url>
      <id>repo</id>
    </mirror>
  </mirrors>
  <profiles>
    <profile>
      <repositories>
        <repository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>libs-release</name>
          <url>http://maven.yourorganization.com:8081/artifactory/libs-release</url>
        </repository>
        <repository>
          <snapshots />
          <id>snapshots</id>
          <name>libs-snapshot</name>
          <url>http://maven.yourorganization.com:8081/artifactory/libs-snapshot</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>plugins-release</name>
          <url>http://maven.yourorganization.com:8081/artifactory/plugins-release</url>
        </pluginRepository>
        <pluginRepository>
          <snapshots />
          <id>snapshots</id>
          <name>plugins-snapshot</name>
          <url>http://maven.yourorganization.com:8081/artifactory/plugins-snapshot</url>
        </pluginRepository>
      </pluginRepositories>
      <id>artifactory</id>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>artifactory</activeProfile>
  </activeProfiles>
</settings>

Usamos essa solução porque tivemos problemas com o acesso à Internet em nossas máquinas de desenvolvimento e alguns artefatos baixaram arquivos corrompidos ou não foram baixados. Não tivemos problemas desde então.


Não há uma máquina com acesso conectada à LAN.

2
Com o artifactory você pode fazer backup de todo o seu repositório e então restaurá-lo em um dos PCs que estão na LAN.
Marcelo

7

Você tem duas opções para isso:

1.) fazer alterações no settings.xml adicionar isso na primeira tag

<localRepository>C:/Users/admin/.m2/repository</localRepository>

2.) use a tag -o para o comando offline.

mvn -o clean install -DskipTests=true
mvn -o jetty:run

6

O Maven precisa das dependências em seu repositório local. A maneira mais fácil de obtê-los é com acesso à internet (ou mais difícil usando outras soluções fornecidas aqui).

Assim, supondo que você possa obter acesso temporário à Internet, você pode se preparar para ficar offline usando o plug-in maven-dependency com seu objetivo dependency: go-offline . Isso irá baixar todas as dependências do seu projeto para o seu repositório local (é claro que as alterações nas dependências / plug-ins exigirão um novo acesso à Internet / repositório central).


4

Infelizmente dependency:go-offlinenão funcionou para mim, pois não armazenou tudo em cache, ou seja. Arquivos POMs e outras dependências mencionam implicitamente.

A solução alternativa foi especificar um local de repositório local , dentro do settings.xmlarquivo com <localRepository>...</localRepository>ou executando mvncom o -Dmaven.repo.local=...parâmetro. Após a construção inicial do projeto, todos os artefatos necessários devem ser armazenados em cache, e então você pode referenciar a localização do repositório da mesma maneira, enquanto executa a construção do Maven no modo offline ( mvn -o ...).


3

Antes de ficar offline, você deve se certificar de que tudo está em seu repositório local, o que é necessário ao trabalhar offline. Executar "mvn dependency: go-offline" para o (s) projeto (s) / pom (s) em que você pretende trabalhar reduzirá os esforços para conseguir isso.

Mas geralmente não é toda a história, porque dependency: go-offline irá apenas baixar os plug-ins "bare build" ( go-offline / resolve-plugins não resolve todas as dependências de plug-ins ). Portanto, você precisa encontrar uma maneira de baixar os plug-ins de implantação / teste / site (e talvez outros) e suas dependências em seu repo.

Além disso, dependency: go-offline não baixa o artefato do pom, então você tem que depender: copie se necessário.

Às vezes - como escreveu o MaDa - você não sabe o que precisará, enquanto estiver offline, o que torna praticamente impossível ter um repositório "suficiente".

De qualquer forma, tendo um repositório devidamente preenchido, você só precisa adicionar "<offline> true </offline>" ao arquivo settings.xml do Maven para ficar offline.

Não altere o perfil (id) Maven que você usou para preencher seu repo, enquanto estava offline. O Maven reconhece os artefatos baixados em seus metadados com uma "identidade", que é associada ao id do perfil.


3

Se estiver usando o IntelliJ, você pode simplesmente ir para Preferências -> Compilar, Execução, Implementação -> Ferramentas de Compilação -> Maven e marcar / desmarcar Trabalhar offline .


1
Da mesma forma - Eclipse é janela -> Preferências -> Maven e marque "Off-line"
Stuart Brock

2

Isso funciona para você?

http://jojovedder.blogspot.com/2009/04/running-maven-offline-using-local.html

Não se esqueça de adicioná-lo ao seu repositório de plugins e apontar a url para onde quer que esteja seu repositório.

<repositories>
    <repository>
        <id>local</id>
        <url>file://D:\mavenrepo</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>local</id>
        <url>file://D:\mavenrepo</url>
    </pluginRepository>
</pluginRepositories>

Caso contrário, você pode precisar executar um servidor local, por exemplo, apache, em suas máquinas.


Isso parece ser mais para dependências e plug-ins como os plug-ins jetty, tomcat, etc. Estou mais preocupado com os plug-ins internos do maven como maven-compiler-plugin

1
@predhme: Esta abordagem funcionará para todos os plug-ins, uma vez que todos eles vão para o repositório maven em sua máquina local
JoseK

2


(fonte: jfrog.com )

ou

Basta usar servidores de repositório Maven como Sonatype Nexus http://www.sonatype.org/nexus/ ou JFrog Artifactory https://www.jfrog.com/artifactory/ .

Depois que um desenvolvedor constrói um projeto, os próximos desenvolvedores ou Jenkins CI não exigirão acesso à Internet.

O servidor de repositório Maven também pode ter proxies configurados para acessar o Maven Central (ou mais repositórios públicos necessários), e eles podem ter uma lista de artefatos sincronizada em repositórios remotos.


1

Minha experiência mostra que a opção -o não funciona corretamente e que a meta de ficar offline está longe de ser suficiente para permitir uma compilação offline completa:

A solução que eu poderia validar inclui o uso da --legacy-local-repositoryopção maven em vez da -o(offline) e o uso do repositório local no lugar do repositório de distribuição

Além disso, tive que copiar todos os maven-metadata-maven2_central.xmlarquivos do maven-metadata.xmlrepositório local no formato esperado pelo maven.

Veja a solução que encontrei aqui .


0

Respondendo diretamente à sua pergunta: não requer conexão com a internet, mas acesso a um repositório, em LAN ou disco local (use dicas de outras pessoas que postaram aqui).

Se o seu projeto não está em uma fase madura, isso significa que quando os POMs são alterados com frequência, o modo offline será muito impraticável, pois você terá que atualizar seu repositório com bastante frequência também. A menos que você possa obter uma cópia de um repositório que tem tudo que você precisa, mas como você saberia? Normalmente, você inicia um repositório do zero e ele é clonado gradualmente durante o desenvolvimento (em um computador conectado a outro repositório). Uma cópia do repositório público repo1.maven.org pesa centenas de gigabytes, então eu também não recomendaria força bruta.


É, mas não como um projeto maven (formiga). Portanto, tenho todas as bibliotecas de que preciso, mas queria saber especificamente sobre as bibliotecas internas do maven. Como maven-plugin-compiler.

Se você tiver todas as dependências gerenciadas pelo Ant, provavelmente não terá metadados do Maven de qualquer forma, então o Maven não os selecionará. Quanto às "bibliotecas internas do Maven", a única maneira de baixá-las é construir sua estrutura pom e executá-la em um computador conectado à Internet. Por "executá-lo", quero dizer executar todos os alvos que você pensa que usará, não necessariamente apenas "instalação limpa mvn".
MaDa

0

Em preparação, antes de trabalhar offline, basta executar mvn dependency:go-offline


0

Um novo plugin apareceu para corrigir as deficiências de mvn dependency:go-offline:

https://github.com/qaware/go-offline-maven-plugin

Adicione-o ao seu pom e execute mvn -T1C de.qaware.maven:go-offline-maven-plugin:resolve-dependencies. Depois de configurar todas as dependências dinâmicas, o maven não tentará baixar nada novamente (até que você atualize as versões).


-2
<offline> false </offline>

<localRepository>${user.home}/.m2/repository</localRepository>

para

<offline> true <offline>

<localRepository>${user.home}/.m2/repository</localRepository>

Altere a tag offline de falsa para verdadeira.

irá baixar do repo online

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.