Skip to content

Instantly share code, notes, and snippets.

@renatoapcosta
Last active September 22, 2024 20:25
Show Gist options
  • Save renatoapcosta/5ebc069846e95a2ceb6d0c4a44119e47 to your computer and use it in GitHub Desktop.
Save renatoapcosta/5ebc069846e95a2ceb6d0c4a44119e47 to your computer and use it in GitHub Desktop.
Maven Settings Configuração

Maven Settings Configuração

Maven é uma ferramenta de automação de construção (builder).

Variável de ambiente

M2_HOME local onde o maven foi instalado

Instalando maven no linux

sudo apt-get install maven

mvn -version

whereis mvn

Maven instalado na pasta /usr/share/maven

Configuração

O Maven fornece um arquivo de configuração chamado settings.xml no qual você pode personalizar as configurações.

  • Instalação do Maven: $M2_HOME/conf/settings.xml, em que M2_HOME é o diretório de instalação do maven.

  • Diretório do usuário: ${user.home}/.m2/settings.xml, em que user.home é o diretório inicial do usuário.

Você pode personalizar os dois. Se esse for o caso, os dois arquivos serão mesclados, mas esteja ciente de que o arquivo de settings específico do usuário tem mais prioridade que o outro.

  • localRepository

  • interactiveMode

  • usePluginRegistry

  • offline

  • pluginGroups

  • servers

  • mirrors

  • proxies

  • profiles

  • activeProfiles

Valores individuais

localRepository - Indica onde está localizado o repositório maven local. Valor padrão: ${user.home}/.m2/repository

interactiveMode - Indica se o maven deve interagir com o usuário para entrada. Valor padrão: true Exemplo: mvn archetype:generate -DgroupId=com.example -DartifactId=DemoProject -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

usePluginRegistry - Este campo indica se o maven deve usar o arquivo plugin-registry.xml na pasta ${user.home}/.m2, para gerenciar versões de plugins. Valor padrão: false

offline - Indica se o maven deve funcionar no modo offline, isto é, o maven não pode conectar-se a servidores remotos. Valor padrão: false

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <localRepository>${user.home}/.m2/repository</localRepository>
  <interactiveMode>true</interactiveMode>
  <usePluginRegistry>false</usePluginRegistry>
  <offline>false</offline>

</settings>

PluginGroups

O puglingGroup aceita valores múltiplos, quando um plugin é invocado, o maven irá procurar ao longo deste elemento para encontrar o groupId para o plugin. Torna mais fácil a execução do maven. Você pode definir vários plugins groupId , por padrão, ele contém os seguintes:

  • org.apache.maven.plugins

  • org.codehaus.mojo

    <?xml version="1.0" encoding="UTF-8"?>
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    
      <pluginGroups>
         <pluginGroup>org.mortbay.jetty</pluginGroup>
         <pluginGroup>your.own.plugin.groupId</pluginGroup>   
      </pluginGroups>
    
    </settings>
    

Servers

As tags de servidores nos permitem definir algumas informações que não devem ser distribuídas dentro de nossos arquivos pom.xml como nome de usuário, senha, chaves privadas, etc ... Podemos definir nossos repositories e nosso distributionManagement com referências à configuração do servidor em nosso arquivo settings.xml ou pom.xml . Vamos ver um exemplo:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <servers>
    <server>
      <id>server_repo_java_code_geeks</id>
      <username>john</username>
      <password>doeIsMyPass</password>
      <privateKey>${user.home}/.ssh/dsa_key</privateKey>
      <passphrase>my_passphrase</passphrase>
      <filePermissions>774</filePermissions>
      <directoryPermissions>775</directoryPermissions>
      <configuration></configuration>
    </server>
	<server>
      <id>server_repo_java_code_geeks_2</id>
      <username>steve</username>
      <password>steve_password</password>
      <privateKey>${user.home}/.ssh/id_dsa</privateKey>
      <passphrase>steve_passphrase</passphrase>
      <filePermissions>664</filePermissions>
      <directoryPermissions>775</directoryPermissions>
      <configuration></configuration>
    </server>
  </servers>

</settings>

Como você pode ver, definimos dois servidores. O campo id é a chave para referenciar esse servidor em nossos arquivos pom.xml . Podemos definir alguns campos relacionados ao servidor como nome de usuário e senha para se conectar ao servidor, permissão para arquivos e diretórios, chaves privadas, etc ... A maioria dos elementos são opcionais, mas esteja ciente de que se você usar uma chave privada, não use uma senha, caso contrário, a chave privada será ignorada.

Desde maven 2.1.10, um mecanismo para criptografar senha foi adicionado, veja isto para mais informações sobre ele.

Mirrors

Às vezes, uma boa abordagem é criar um espelho de um repositório, a fim de reduzir o tráfego na rede em uma grande organização ou otimizar as operações de criação. O espelho é como um cache de um repositório específico. Podemos definir em settings.xml esses espelhos, então o maven irá melhorar suas operações. Vamos ver um exemplo:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <mirrors>
    <mirror>
      <id>centralmirror</id>
      <name>Apache maven central mirror Spain</name>
      <url>http://downloads.centralmirror.com/public/maven</url>
      <mirrorOf>maven_central</mirrorOf>
    </mirror>
	<mirror>
      <id>jcg_mirror</id>
      <name>Java Code Gueeks Mirror Spain</name>
      <url>http://downloads.jcgmirror.com/public/jcg</url>
      <mirrorOf>javacodegeeks_repo</mirrorOf>
    </mirror>
  </mirrors>

</settings>

Como você pode ver, definimos dois espelhos, um para o repositório central do Apache maven e outro para um repositório de geeks do código java fictício. O campo mirrorOf deve apontar para um id de um repositório definido.

O campo de id não deve corresponder ao valor de mirrorOf do campo.

Você pode ver mais detalhes sobre os espelhos dos repositórios aqui .

Proxies

Podemos definir um proxy HTTP para permitir acesso à internet, alcançando os repositórios necessários. Vamos ver um exemplo:

 <?xml version="1.0" encoding="UTF-8"?>
 <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <proxies>
    <proxy>
      <id>jcg_proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.javacodegueeks.com</host>
      <port>9000</port>
      <username>proxy_user</username>
      <password>user_password</password>
      <nonProxyHosts>*.google.com|javacodegueeks.com</nonProxyHosts>
    </proxy>
  </proxies>

</settings>

Como você pode ver, definimos um servidor proxy HTTP que está em um host chamado proxy.javacodegueeks.com , escutando na porta 9000, com um usuário e senha específicos e alguns padrões de URL excluídos por proxy.

Profiles

Os perfis são um mecanismo de maven que adiciona a capacidade de modificar alguns valores ou propriedades em determinadas circunstâncias. O perfil definido no arquivo settings.xml é uma versão reduzida do perfil que podemos definir dentro do arquivo pom.xml . Podemos definir condições de ativação, repositórios, pluginRepositories e elementos de propriedades. Tenha em atenção que, se o mesmo ID de perfil estiver definido em pom.xml e settings.xml , os valores de settings.xml substituirão os valores definidos em pom.xml . Vamos ver um exemplo:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <profiles>
    <profile>
      <id>test</id>
      <activation>
	<activeByDefault>false</activeByDefault>
	<jdk>1.6</jdk>
	<os>
	  <name>Windows XP</name>
	  <family>Windows</family>
	  <arch>x86</arch>
	  <version>5.1.3200</version>
	</os>
	<property>
	  <name>mavenVersion</name>
	  <value>3.0.3</value>
	</property>
	<file>
	  <exists>${basedir}/windows.properties</exists>
	  <missing>${basedir}/windows_endpoints.properties</missing>
	</file>
      </activation>

       <properties>
	  <user.project>${user.home}/your-project</user.project>
	  <system.jks>${user.home}/your_jks_store</system.jks>
      </properties>

      <repositories>
	<repository>
	  <id>codehausSnapshots</id>
	  <name>Codehaus Snapshots</name>
	  <releases>
	    <enabled>false</enabled>
	    <updatePolicy>always</updatePolicy>
	    <checksumPolicy>warn</checksumPolicy>
	  </releases>
	  <snapshots>
	    <enabled>true</enabled>
	    <updatePolicy>never</updatePolicy>
	    <checksumPolicy>fail</checksumPolicy>
	  </snapshots>
	  <url>http://snapshots.maven.codehaus.org/maven2</url>
	  <layout>default</layout>
	</repository>
      </repositories>

          <pluginRepositories>
	 <pluginGroup>your.own.plugin.groupId</pluginGroup>
      </pluginRepositories>

    </profile>
  </profiles>

</settings>

Se você vir a tag de ativação, definimos alguns elementos para ativar esse perfil. Esse perfil não é ativado por padrão, conforme indicado no campo activeByDefault . Se alguns desses critérios que definimos forem correspondidos, o maven ativará este perfil.

Nós definimos algumas propriedades dentro da tag de properties . Quando esse perfil está ativo, podemos acessar essas propriedades em qualquer lugar dentro do arquivo pom.xml com a notação ${prop} , em que prop é o nome que damos à propriedade.

Nós definimos alguns repositories e plugingRepositories também. Esses elementos podem ser usados ​​quando esse perfil é ativado.

Exemplo 2 Vamos criar no settings.xml um profile sem ativar, pois vamos ativar somente no momento de build

<profiles>
    <profile>
      <id>develop</id>	      
      <repositories>
	<repository>
	  <id>spring_plugins</id>
	  <name>Spring Plugins</name>
	  <url>http://repo.spring.io/plugins-release/</url>	 
	</repository>
      </repositories>
  </profile>
</profiles>    


mvn clean install -P develop

Active profiles

Podemos colocar dentro do activeProfiles alguns perfis definidos e todos eles serão ativados independentemente de suas condições de ativação ou elementos de configuração. Vamos ver um exemplo:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <activeProfiles>
    <activeProfile>test</activeProfile>
  </activeProfiles>

</settings>

Conclusão

Como vimos neste exemplo, o arquivo de settings maven nos permite personalizar a execução do maven de várias maneiras diferentes e podemos realizar muitas coisas com o arquivo settings.xml .

Podemos ver todo o arquivo xml de configurações abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <localRepository>${user.home}/.m2/repository</localRepository>
  <interactiveMode>true</interactiveMode>
  <usePluginRegistry>false</usePluginRegistry>
  <offline>false</offline>

  <pluginGroups>
       <pluginGroup>org.mortbay.jetty</pluginGroup>
	   <pluginGroup>your.own.plugin.groupId</pluginGroup>	   
  </pluginGroups>

  <servers>
    <server>
      <id>server_repo_java_code_gueeks</id>
      <username>john</username>
      <password>doeIsMyPass</password>
      <privateKey>${user.home}/.ssh/dsa_key</privateKey>
      <passphrase>my_passphrase</passphrase>
      <filePermissions>774</filePermissions>
      <directoryPermissions>775</directoryPermissions>
      <configuration></configuration>
    </server>
	<server>
      <id>server_repo_java_code_gueeks_2</id>
      <username>steve</username>
      <password>steve_password</password>
      <privateKey>${user.home}/.ssh/id_dsa</privateKey>
      <passphrase>steve_passphrase</passphrase>
      <filePermissions>664</filePermissions>
      <directoryPermissions>775</directoryPermissions>
      <configuration></configuration>
    </server>
  </servers>

  <mirrors>
    <mirror>
      <id>centralmirror</id>
      <name>Apache maven central mirror Spain</name>
      <url>http://downloads.centralmirror.com/public/maven</url>
      <mirrorOf>maven_central</mirrorOf>
    </mirror>
	<mirror>
      <id>jcg_mirror</id>
      <name>Java Code Gueeks Mirror Spain</name>
      <url>http://downloads.jcgmirror.com/public/jcg</url>
      <mirrorOf>javacodegueeks_repo</mirrorOf>
    </mirror>
  </mirrors>

  <proxies>
    <proxy>
      <id>jcg_proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.javacodegueeks.com</host>
      <port>9000</port>
      <username>proxy_user</username>
      <password>user_password</password>
      <nonProxyHosts>*.google.com|javacodegueeks.com</nonProxyHosts>
    </proxy>
  </proxies>

  <profiles>
    <profile>
      <id>test</id>
      <activation>
	<activeByDefault>false</activeByDefault>
	<jdk>1.6</jdk>
	<os>
	  <name>Windows XP</name>
	  <family>Windows</family>
	  <arch>x86</arch>
	  <version>5.1.3200</version>
	</os>
	<property>
	  <name>mavenVersion</name>
	  <value>3.0.3</value>
	</property>
	<file>
	  <exists>${basedir}/windows.properties</exists>
	  <missing>${basedir}/windows_endpoints.properties</missing>
	</file>
      </activation>

      <properties>
	<user.project>${user.home}/your-project</user.project>
		<system.jks>${user.home}/your_jks_store</system.jks>
      </properties>

      <repositories>
	<repository>
	  <id>codehausSnapshots</id>
	  <name>Codehaus Snapshots</name>
	  <releases>
	    <enabled>false</enabled>
	    <updatePolicy>always</updatePolicy>
	    <checksumPolicy>warn</checksumPolicy>
	  </releases>
	  <snapshots>
	    <enabled>true</enabled>
	    <updatePolicy>never</updatePolicy>
	    <checksumPolicy>fail</checksumPolicy>
	  </snapshots>
	  <url>http://snapshots.maven.codehaus.org/maven2</url>
	  <layout>default</layout>
	</repository>
      </repositories>

      <pluginRepositories>
	 <pluginGroup>your.own.plugin.groupId</pluginGroup>
      </pluginRepositories>

    </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>test</activeProfile>
  </activeProfiles>

</settings>

Tradução link: javacodegeeks/maven-settings-xml-example

Maven Baixar Dependencias

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.2</version>
                <executions>
                    <execution>
                        <id>resolve-dependencies</id>
                        <goals>
                            <goal>resolve</goal>
                        </goals>
                        <configuration>
                            <includeTransitiveDependencies>true</includeTransitiveDependencies>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.2</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  
  <mirrors>
    <!-- Espelho para redirecionar todas as requisições para o repositório Maven interno -->
    <mirror>
      <id>internal-maven-group</id>
      <mirrorOf>*</mirrorOf>
      <url>http://your.internal.maven.repo/repository/maven-group/</url>
    </mirror>
  </mirrors>

  <profiles>
    <profile>
      <id>default</id>
      <repositories>
        <repository>
          <id>maven-release</id>
          <url>http://your.internal.maven.repo/repository/maven-release/</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
        <repository>
          <id>maven-snapshots</id>
          <url>http://your.internal.maven.repo/repository/maven-snapshots/</url>
          <releases>
            <enabled>false</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
        <repository>
          <id>maven-group</id>
          <url>http://your.internal.maven.repo/repository/maven-group/</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>default</activeProfile>
  </activeProfiles>

</settings>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment