pom.xml e Settings.xml
pode -se dizer que o POM.XML e o Setting.xml são os dois arquivos de configuração mais importantes no MAVEN, o que determina as funções principais do MAVEN. Embora os artigos anteriores tenham mencionado o conteúdo do POM.xml e Settings.xml em fragmentos, todos são mencionados brevemente e a aprendizagem e a pesquisa não são detalhadas. O objetivo deste artigo é estudar esses dois arquivos de configuração importantes em detalhes. Esses dois arquivos de configuração podem levar a muitos tópicos do Maven.
Coordenadas do MAVEN
Primeiro, vamos falar sobre por que precisamos usar coordenadas do Maven.
O mundo Maven tem um número muito grande de componentes, ou seja, alguns jar, guerra e outros arquivos que geralmente são usados. Antes do MAVEN introduzir o conceito de coordenadas para esses componentes, não podemos usar nenhum método para identificar exclusivamente todos esses componentes. Portanto, se você precisar usar as dependências da mola, vá para o site oficial da primavera para pesquisar; Se você precisar usar dependências log4j, vá para o site oficial do Apache para pesquisar. Devido aos diferentes estilos de cada site, é gasto muito tempo em pesquisar e navegar nas páginas da web. Sem normas e regras unificadas, o trabalho não pode ser automatizado e o trabalho repetitivo deve ser deixado para as máquinas.
O MAVEN define um conjunto de regras: qualquer componente no mundo pode ser identificado exclusivamente pelas coordenadas do MAVEN. Os elementos de coordenadas do MAVEN incluem groupID, ArtifactID, versão, embalagem e classificador. Agora, desde que forneçamos as coordenadas corretas do elemento, o Maven pode encontrar o componente correspondente. Quanto ao download, o Maven em si tem um endereço interno de um armazém central "http://repo1.maven.org/maven2". O armazém central contém a maioria dos componentes populares do projeto de código aberto do mundo. Mavne vai baixá -los quando necessário. Obviamente, você também pode configurar seu próprio endereço de armazém central e baixar componentes em seu próprio armazém central.
Por exemplo, o contexto da primavera:
<Depencency> <GrupidId> org.springframework </frugiD> <ArtifactId> Spring-Context </ArtifactId> <versão> 4.2.6.release </versão </dependency
Dê uma olhada nos elementos do subordinado:
Este é aproximadamente o conceito de coordenadas do Maven. Entender as coordenadas do MAVEN é um passo muito importante para entender o MAVEN.
Dependência transitiva
O que é dependência transitiva? Tome a primavera como exemplo. Ao usar a primavera, você confiará em outras bibliotecas de classe de código aberto. Existem duas maneiras de fazer isso:
1. Faça o download de um grande pacote .zip que contém todos os frascos de primavera, mas fazê -lo geralmente introduz muitas dependências desnecessárias
2. Faça o download dos pacotes .ZIP relacionados à mola, não incluem dependências. Ao usá -los, adicione outras dependências necessárias de acordo com as informações de erro.
Obviamente, ambas as abordagens são muito problemáticas, e o mecanismo de dependência transitivo do Maven resolve bem esse problema. Abra o Pom.xml de Spring-Core-4.1.0.Release, e intercepto uma peça-chave:
<Dependences> <pendency> <puperId> Commons-codec </GroupId> <ArtifactId> Commons-Codec </ArtifactId> <Version> 1.9 </sisters> </scope> compilação </scope> </opcional> </opcional> </dependency> <PuprouDId> comons-loggging </grupo> artista> </Artift> </Artift> </dependência> <pusenge> comonons-logggging </grupo> <Versão> 1.1.3 </versão> <cope> Compile </schope> </dependency> ... </dependências>
Por exemplo, o projeto A depende do núcleo de mola, o núcleo de mola depende do commons-Codec e do Commons-Logging, de modo que o codec e o registro do Commons são dependências transitivas do Projeto A. Com o mecanismo de dependência transitiva, ao usar o núcleo de mola, você não precisa considerar o que ele depende e não precisa se preocupar com a dependência não atendida. O Maven analisará cada POM de dependência direta e introduzirá as dependências indiretas necessárias no projeto atual na forma de dependências transitivas.
Com o mecanismo de dependência transitivo, por um lado, simplifica e facilita bastante a declaração de dependência. Por outro lado, na maioria dos casos, precisamos apenas nos preocupar com quais são as dependências diretas do projeto e não precisamos considerar quais dependências transitivas serão introduzidas por essas dependências diretas. No entanto, às vezes dependências transitivas também terão alguns problemas. Nesse momento, precisamos limpar o caminho do qual a dependência transitiva foi introduzida. Isso é chamado de mediação de dependência. Existem dois princípios principais de mediação de dependência:
1. A-> b-> c-> x (1,0), a-> d-> x (2.0), neste momento, existem duas versões de x nos dois caminhos de dependência. Neste momento, o caminho mais próximo é preferido, portanto, x (2.0) será analisado e usado.
2. Os comprimentos de dependência de A-> B-> y (1,0), a-> c-> y (2.0), y (1.0) e y (2.0) são os mesmos. A partir do MAVEN2.0.9, a primeira declaração segue a prioridade, ou seja, a dependência com a ordem mais alta é preferida.
Excluir dependências
As dependências transitivas introduzirão implicitamente muitas dependências no projeto, o que simplifica bastante o gerenciamento das dependências do projeto, mas às vezes esse recurso também pode causar problemas. Por exemplo, há uma situação:
O projeto atual depende de A. A depende da versão instantânea de outra biblioteca de classes por algum motivo. Então esse instantâneo se tornará uma dependência transitiva do projeto atual. Segundo, a instabilidade do instantâneo afetará diretamente o projeto atual. No momento, o instantâneo precisa ser excluído e uma versão formal de lançamento da biblioteca de classes é declarada no projeto atual.
É muito simples excluir dependências, vamos dar uma olhada no método de escrita:
<Depencency> <PuerpId> com.alibaba.rocketmq </groupiD> <TRAFACTID> RocketMQ-client
Aqui, introduzi a dependência do RocketMQ, mas não quero confiar no Apache-Lang no RocketMQ, mas quero introduzir dependências sozinho, então excluí o Apache-Lang.
Deve -se notar aqui que, ao declarar a exclusão, apenas o grupo e o ArtifactID são necessários, e os elementos da versão não são necessários. Isso ocorre porque apenas o grupo e o ArtifactID são necessários para localizar exclusivamente uma dependência no gráfico de dependência. Em outras palavras, nas dependências analisadas do Maven, é impossível ter duas dependências com o mesmo grupo e o Artifactid, mas versões diferentes.
Settings.xml
Settings.xml é a configuração básica do Maven. Existem muitos elementos, então vamos dar uma olhada nele um por um.
1. Proxy
Proxy significa proxy do MAVEN. Vamos dar uma olhada no método de escrita:
<Roxies> <Iroxy> <d> opcional </dod> <itive> true </itivion> <strocol> http </protocol> <username> proxyuser </username> <dasty> proxypsass </senha> <dost> proxy.host.net </host> <tom> 80 </Port> <NONProxyHosts> local.net | Some.host.com </nocrexyhosts> </roxy> </roxies>
O proxy é necessário porque muitas vezes sua empresa exige que você acesse a Internet usando um proxy certificado de segurança com base em considerações de segurança. Nesse caso, você precisa configurar um proxy HTTP para Maven para permitir que ele acesse o repositório externo normalmente para baixar os recursos necessários. Vários elementos de proxy podem ser configurados sob proxies. Se vários elementos proxy forem declarados, o primeiro proxy ativado entrará em vigor por padrão. Ativo é verdadeiro para ativar o proxy, o protocolo representa o protocolo de proxy usado, é claro, o mais importante é especificar o nome correto do host (host) e a porta (porta). Se o servidor proxy precisar de autenticação, configure o nome de usuário e a senha. O elemento não proxi -host indica quais nomes de host não requerem um proxy. Você pode usar "|" para separar vários nomes de host e também suportar curinga "*".
2. Repositório
O repositório representa o armazém central de Maven, porque, embora os componentes no armazém remoto padrão sejam muito grandes, sempre haverá momentos em que eles não atendem às nossas necessidades e, em seguida, outros armazéns centrais serão usados. Vamos dar uma olhada no método de escrita:
<Ppository> <id> public </d> <name> Nexus privado local </name> <url> http://192.168.1.6:8081/nexus/content/groups/public </erl> <luders> <inabled> </abled> </plyeseds> <snapshts> </erl> <lueds> <inabled> </abled> </l a RELEASSHOTS>
Vários repositórios podem ser declarados. O ID deve ser único. Preste atenção especial que o ID usado pelo repositório central que o Maven vem é central. Se outras declarações do repositório também usarem esse ID, a configuração do repositório central será substituída. Os lançamentos e instantâneos são mais importantes. O primeiro significa abrir o suporte para download da versão de lançamento para o repositório, e o último significa fechar o suporte para download da versão instantânea para o repositório. Dessa forma, o Maven irá ao repositório para baixar a versão de lançamento do repositório sem baixar a versão instantânea do repositório.
3. Servidor
A maioria dos armazéns remotos pode ser acessada sem autenticação, mas às vezes é considerada em fatores de segurança e precisa fornecer informações de autenticação para acessar alguns armazéns remotos. Para considerações de segurança, as informações de autenticação geralmente são colocadas apenas em configurações.xml, e o servidor é o elemento de autenticação. Dê uma olhada na configuração:
<merver> <d> nexus-libera </d> <username> implantação </sername> <dasting> implantação </senha> </verver>
A chave aqui é o ID. Esse ID deve ser exatamente o mesmo que o ID do elemento repositir que precisa ser autenticado. Em outras palavras, o ID formal vincula as informações de autenticação e a configuração do repositório.
4. Espelho
Se o armazém x puder fornecer todo o conteúdo armazenado no armazém y, o armazém x poderá ser considerado como um espelho do armazém Y. Em outras palavras, qualquer componente que possa ser obtido de y pode ser obtido de X. Por exemplo, "http://maven.net.cn/content/groups/public/" "http://repo1.maven.org/maven2/" na China. Devido a fatores de localização geográfica, o espelho geralmente é capaz de fornecer serviços mais rápidos do que o armazém central, e é por isso que o espelho é usado.
Dê uma olhada na configuração do espelho:
<dinfly> <d> nexus </d> <name> Repositório Nexus interno </name> <url> http://192.168.1.6:8081/nexus/content/groups/public </url> <flinporof>*</espelho- </espelho- </Mirlor>
Neste exemplo, o espelho é *, indicando que a configuração é um espelho para todos os repositórios centrais, e quaisquer solicitações para o repositório central serão transferidos para o espelho. Os outros três elementos ID, nome e URL não são diferentes da configuração geral do armazém, representando o identificador, nome e endereço exclusivos do Mirror Warehouse. Da mesma forma, se a imagem requer autenticação, a autenticação do repositório também poderá ser configurada com base no ID.
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!