Arquivo por categoria .m2

Alterando o diretório padrão dos artefatos Maven

Algumas vezes pode ser interessante mudar o diretório padrão em que o repositório do Maven armazena seus artefatos. Por padrão eles são salvos na pasta.

 C:\Users\seu_usuario\.m2\repository

No diretório “C:\Program Files\Apache Software Foundation\{{sua_versao_maven}}\conf\” temos o arquivo settings.xml abra esse arquivo em um editor de texto plano e logo no início do arquivo adicione a tag localRepository especificando onde seus artefatos serão salvos.

<?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">
				
		<!-- Essa é a tag mágica -->
		<localRepository>D:\MavenRepository\repository</localRepository>
		

Agora sempre que precisar de um novo artefato o Maven vai procurar nesse diretório e caso não o encontre irá baixa-lo dos repositórios remotos.

Tags: ,

Entendendo o POM do Maven

Continuando a responder a pergunta “para que serve o apache maven?” nesse post eu explico a estrutura básica de um arquivo POM. O POM é um dos arquivos mais importantes em um projeto Maven, ele descreve uma série de configurações que o projeto terá e quais repositórios e dependências seu projeto irá precisar.
No cabeçalho de um POM temos algumas tags básicas que definem qual versão do modelo de POM utilizado. O seu GroupId que seria algo como o prefixo da estrutura de pacotes do projeto. O ArtifactId que define qual é o nome o artefato final .war ou .jar terá quando empacotado. Version define a versão do projeto que irá complementar o nome do artefato. A tag Packaging por sua vez define qual tipo de empacotamento o projeto terá após o processo de build, no nosso caso será um .war. E a tag Name define o nome do projeto.

    <modelVersion>4.0.0</modelVersion>
    <groupId>br.com.semeru</groupId>
    <artifactId>semeru_jsf_maven</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>semeru_jsf_maven</name>

A tag Properties possibilita definir por exemplo a versão do Spring, ou do JSF adotada para o projeto. Se uma dependência for definida como no trecho de código abaixo ao mudarmos a versão do Spring, por exemplo, para 3.1 todas as dependências serão baixadas para a versão 3.1. Podemos definir o contêiner web no qual será feito o deploy da aplicação (Tomcat) e também o tipo de codificação utilizada pelo projeto, no nosso caso o UTF8 .

    <properties>
        <spring.version>3.0.5.RELEASE</spring.version>
        <themes.version>1.0.8</themes.version>
        <jsf.version>2.1.7</jsf.version>
        <jstl.version>1.2</jstl.version>
        <netbeans.hint.deploy.server>Tomcat</netbeans.hint.deploy.server>   
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

A tag Repositories define a lista de repositórios que serão acessados pelo Maven para baixar nossas dependencias. Muitas vezes é necessário colocar um repositório prioritário no inicio do POM para que o Maven inicie a busca pelas dependências a partir dele.

    <repositories>
        
        <!-- PRIMEFACES REPOSITORY -->
        <repository>
            <id>prime-repo</id>
            <name>PrimeFaces Maven Repository</name>
            <url>http://repository.primefaces.org</url>
            <layout>default</layout>
        </repository>        
                
        <!-- FACELETS TAGLIBRARIES REPOSITORY -->
        
        <repository>
            <id>org.springframework.security.taglibs.facelets</id>
            <url>http://spring-security-facelets-taglib.googlecode.com/svn/repo/</url>
        </repository>

    </repositories>

A tag dependencies define quais serão as dependências utilizadas no projeto no trecho de código abaixo declaramos algumas das dependências necessárias para se trabalhar com JavaServer Faces.

    <dependencies>

        <!-- || DEPENDÊNCIAS DO JAVA SERVER FACES || -->                        
        <!-- ############## JSF-API ################ -->
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>${jsf.version}</version>
            <scope>compile</scope>
        </dependency>

        <!-- ############## JSF-IMPL ############### -->
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>${jsf.version}</version>
        </dependency>
                
        <!-- ################ JSTL ################# -->
        <dependency>  
            <groupId>javax.servlet</groupId>  
            <artifactId>jstl</artifactId>  
            <version>${jstl.version}</version>  
        </dependency>  
    </dependencies>

Muitas vezes algumas dependências precisam ser excluídas. Isso acontece por vários motivos primeiro pode ser que o projeto já utilize uma versão diferente da mesma dependência. Um segundo motivo pode ser o fato da dependência em questão gerar conflitos com outras utilizadas no projeto. A sintaxe para remover uma dependência é como o trecho de código abaixo. Nele estamos declarando a dependência do DOM4J mas estamos dizendo ao Maven para não baixar a dependência da XML-APIS. Se tirarmos essa exclusão o Maven vai analizar o POM da DOM4J e verificará que ela possui uma dependência da XML-APIS e assim entenderá que o projeto necessita dela e irá baixá-la para nosso .m2.

        <!-- ############### DOM4J ################# -->
        <dependency>
            <artifactId>dom4j</artifactId>
            <groupId>dom4j</groupId>
            <type>jar</type>
            <version>1.6.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>xml-apis</artifactId>
                    <groupId>xml-apis</groupId>
                </exclusion>
            </exclusions>
        </dependency>

Anteriormente no post Entendendo o Apache Maven eu expliquei outros detalhes importantes do Maven além disso no GUJ tem um tutorial bem legal sobre o assunto.

Entendendo o Apache Maven

Apache Maven
Olá. Percebi que muitas pessoas chegaram ao post sobre o Apache Archiva procurando por Apache Maven. Sendo assim decidi fazer um post sobre o Maven para ajudar aqueles que desconhecem esse poderoso framework.
Bom o Maven é mais conhecido por gerenciar dependências. Com o Maven não é mais necessário acessar vários sites baixar uma série de bibliotecas adicioná-las ao projeto e quando tudo não vai bem procurar bibliotecas que você se esqueceu. Além disso, se for trabalhar em equipe, você enfrentará outros problemas como ter que colocar sempre uma serie de jars junto ao projeto quanto for passar o código para outros desenvolvedores. Não raramente acaba ficando um ou ouro jar para traz e vira um inferno procurar os jars faltantes.
Por outro lado se você utiliza Subversion ou GIT (o que eu espero que você esteja fazendo) você reduzirá bastante o problema com bibliotecas. Entretanto tem-se um outro problema depois de muitos commits de jars junto com o projeto seu repositório vai ficando mais e mais inchado. Enfim você ocupará espaço desnecessário no repositório.
O Maven resolve quase que completamente esse problema, na medida em que com ele você passará a commitar apenas código. Bom o Maven procura as dependências declaradas em um arquivo XML chamado POM (Project Object Model), baixa todas elas e armazena-as em um repositório local localizado no diretório .m2 dentro do diretório do usuário, dessa forma todo projeto que utilize uma dependência em comum irá compartilha-la a partir do diretório .m2. Desse modo inclusive o tráfego na rede é reduzido na medida em que não é necessário ficar baixando sempre a mesma dependência. Ainda assim é interessante utilizar uma ferramenta como o Nexus para fazer cache dessas dependência na rede interna da empresa minimizando o tráfego.
Além de gerenciar dependências o Maven possibilita dentre outras coisas montar uma arquitetura básica para vários tipos de aplicação com apenas alguns comandos. Espero que este post seja um pontapé inicial para que você comece a utilizar o Apache Maven. Num post posterior irei abordar a estrutura do POM e talvez o próprio Nexus.

Tags: , , , , , , ,