Comando Maven para determinar qual arquivo settings.xml o Maven está usando

278

Como uso a linha de comando maven para determinar qual arquivo settings.xml o Maven está pegando?

harschware
fonte

Respostas:

333

Inicie o maven com a opção -X (depuração) e examine o início da saída. Deve haver algo como isto:

...
[INFO] Error stacktraces are turned on.
[DEBUG] Reading global settings from c:\....\apache-maven-3.0.3\conf\settings.xml
[DEBUG] Reading user settings from c:\....\.m2\settings.xml
[DEBUG] Using local repository at C:\....\repository
...

(Os nomes dos diretórios originais são removidos por mim)

elek
fonte
10
Talvez isso não estivesse na saída de depuração até o lançamento do maven 3, mas sua postagem, 2,5 anos depois, é finalmente a resposta exata que eu estava procurando (desculpe pelo atraso de 6 meses em notá-la).
Hschware #
A versão do maven que eu estava usando, maven2.x, não mostrou esse detalhe importante quando o sinalizador -B foi usado. ... Infelizmente, se você estiver tentando depurar o que está acontecendo com um servidor Jenkins.
Cognitiaclaeves 12/08/19
168

O seu comentário à resposta do cletus (correto) implica que há vários arquivos de configurações do Maven envolvidos.

O Maven sempre usa um ou dois arquivos de configurações. As configurações globais definidas em ($ {M2_HOME} /conf/settings.xml) são sempre necessárias. O arquivo de configurações do usuário (definido em $ {user.home} / .m2 / settings.xml) é opcional. Quaisquer configurações definidas nas configurações do usuário têm precedência sobre as configurações globais correspondentes.

Você pode substituir o local das configurações globais e do usuário na linha de comando, o exemplo a seguir definirá as configurações globais para c: \ global \ settings.xml e as configurações do usuário para c: \ user \ settings.xml :

mvn install --settings c:\user\settings.xml 
    --global-settings c:\global\settings.xml

Atualmente, não há propriedades ou meios para estabelecer de que arquivos de configurações globais e de usuário foram usados ​​com o Maven. Para acessar esses valores, você precisaria modificar o MavenCli e / ou DefaultMavenSettingsBuilder para injetar os locais do arquivo no objeto Configurações resolvido.

Vendedor rico
fonte
1
seria ótimo se pudéssemos fornecer o settings.xml de vários usuários, para que pudéssemos usá-los com projetos diferentes, por exemplo. Eu sei que poderíamos usar um perfil. Mas seria muito melhor se houvesse um arquivo separado. Não é possível, né ?! Felicidades!
despot
Eu estava procurando uma solução para substituir minhas configurações de usuário apenas uma vez, sem precisar alterar o arquivo. Então, eu apenas usei o arquivo global para as configurações do usuário. Ou seja --settings c: \ Global \ settings.xml Desta forma, o arquivo de usuário foi omitido
msp
@despot, atrasado para a festa, mas de uma maneira que você pode através de vários perfis definidos e alguns 'gatilhos' personalizados: maven.apache.org/settings.html#Activation
indivisível
Ele sempre pede pom na pasta atual. "O objetivo que você especificou requer a execução de um projeto, mas não há POM neste diretório (/). Verifique se você invocou o Maven no diretório correto. -> [Ajuda 1]"
Nilesh
137

Você pode usar o plug - in de ajuda do maven para informar o conteúdo do usuário e os arquivos de configurações globais.

mvn help:effective-settings

solicitará ao maven que cuspa as configurações globais e de usuário combinadas .

serg10
fonte
Ela ajuda a me atualizar velho maven repo repo1.maven.org/maven2 para search.maven.org
Ricardo
40

Este é o arquivo de configuração do Maven. Pode ser especificado em dois níveis:

  1. Nível de usuário. Esse arquivo settings.xml fornece configuração para um único usuário e normalmente é fornecido em $ {user.home} / .m2 / settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/settings.xml
  2. Nível global. Esse arquivo settings.xml fornece configuração para todos os usuários do Maven em uma máquina (supondo que todos estejam usando a mesma instalação do Maven). É normalmente fornecido em $ {maven.home} /conf/settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -gs /path/to/global/settings.xml
firstthumb
fonte
1
a propriedade é M2_HOME, não maven.home
Rich Seller
Não importa. Se você definir a variável de ambiente usando maven.home, não será um problema
firstthumb
24

A M2_HOMEvariável de ambiente para a global. Consulte Referência de configurações :

O settingselemento no settings.xmlarquivo contém elementos usados ​​para definir valores que configuram a execução do Maven de várias maneiras, como o pom.xml, mas não devem ser agrupados em nenhum projeto específico ou distribuídos para um público. Isso inclui valores como o local do repositório local, servidores de repositório remoto alternativos e informações de autenticação. Existem dois locais em que um arquivo settings.xml pode estar:

  • A instalação do Maven: $M2_HOME/conf/settings.xml
  • A instalação de um usuário: ${user.home}/.m2/settings.xml
cleto
fonte
Se esta resposta implica que a determinação do repositório é feita apenas examinando o ambiente, essa é uma resposta válida. Eu esperava aprender de uma opção de linha de comando ou de algo que forneça uma lista definitiva de caminhos qualificados para todos os arquivos settings.xml usados ​​... Acho que provavelmente não existe esse mecanismo.
harschware
3
+1 resposta, Cletus. Eu acho que vale a pena mencionar a próxima linha do seu link "Configurações de referência":the former settings.xml are also called global settings, the latter settings.xml are referred to as user settings. If both files exists, their contents gets merged, with the user-specific settings.xml being dominant.
Kevin Meredith
A necessidade de ter uma configuração específica da máquina para encontrar os repositórios privados me incomoda muito. Sei que esse é o status quo no ecossistema Java, mas leva a configurações de compilação terrivelmente improdutíveis.
jpierson
24

Um método rápido e sujo para determinar se o Maven está usando o settings.xml desejado invalidaria seu xml e executaria algum comando seguro do maven que requer o settings.xml.

Se ele ler este settings.xml, o Maven reportará um erro: "Erro ao ler o settings.xml ..."

topchef
fonte
3
Enquanto resposta Cletus' foi muito informativo, esta resposta é no sentido mais estrito mais o que eu estava procurando (dado parece haver uma falta de qualquer mecanismo de relatório de arquivo settings.xml em si Maven)
harschware