<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Felipe Santos</title>
	<atom:link href="http://felipemsantos.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://felipemsantos.wordpress.com</link>
	<description></description>
	<lastBuildDate>Tue, 21 Jun 2011 23:00:20 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='felipemsantos.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Felipe Santos</title>
		<link>http://felipemsantos.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://felipemsantos.wordpress.com/osd.xml" title="Felipe Santos" />
	<atom:link rel='hub' href='http://felipemsantos.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Exemplos?!</title>
		<link>http://felipemsantos.wordpress.com/2011/04/11/exemplos/</link>
		<comments>http://felipemsantos.wordpress.com/2011/04/11/exemplos/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 19:45:53 +0000</pubDate>
		<dc:creator>Felipe Santos</dc:creator>
				<category><![CDATA[Dicas]]></category>

		<guid isPermaLink="false">http://felipemsantos.wordpress.com/?p=107</guid>
		<description><![CDATA[Pessoal, fica aqui o aviso, todos os exemplos e materiais técnicos relacionados aos posts do blog estão disponíveis no http://code.google.com/p/felipemsantos/.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipemsantos.wordpress.com&amp;blog=7768986&amp;post=107&amp;subd=felipemsantos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Pessoal,</p>
<p>fica aqui o aviso, todos os exemplos e materiais técnicos relacionados aos posts do blog estão disponíveis no <a href="http://code.google.com/p/felipemsantos/">http://code.google.com/p/felipemsantos/</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/felipemsantos.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/felipemsantos.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/felipemsantos.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/felipemsantos.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/felipemsantos.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/felipemsantos.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/felipemsantos.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/felipemsantos.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/felipemsantos.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/felipemsantos.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/felipemsantos.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/felipemsantos.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/felipemsantos.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/felipemsantos.wordpress.com/107/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipemsantos.wordpress.com&amp;blog=7768986&amp;post=107&amp;subd=felipemsantos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://felipemsantos.wordpress.com/2011/04/11/exemplos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c4579ad2a07d16f89304d59c29ff4c4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">felipemsantos</media:title>
		</media:content>
	</item>
		<item>
		<title>toString/equals/hashCode na mão?! tsc, tsc, tsc</title>
		<link>http://felipemsantos.wordpress.com/2011/03/02/tostringequalshashcode-nao-mao-tsc-tsc-tsc/</link>
		<comments>http://felipemsantos.wordpress.com/2011/03/02/tostringequalshashcode-nao-mao-tsc-tsc-tsc/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 19:10:19 +0000</pubDate>
		<dc:creator>Felipe Santos</dc:creator>
				<category><![CDATA[Boas Práticas]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://felipemsantos.wordpress.com/?p=89</guid>
		<description><![CDATA[Quem nunca precisou sobrescrever os métodos toString(), equals() e hashCode() em suas classes de domínio?! Uma forma simples de fazer isso é utilizar o componente Lang do projeto Apache Commons, esse camarada possui algumas classes que fazem o trabalho árduo pra você. Veja a dificuldade de fazer isso: public abstract class Entidade implements Serializable { /** * [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipemsantos.wordpress.com&amp;blog=7768986&amp;post=89&amp;subd=felipemsantos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Quem nunca precisou sobrescrever os métodos toString(), equals() e hashCode() em suas classes de domínio?!</p>
<p>Uma forma simples de fazer isso é utilizar o componente <a href="http://commons.apache.org/lang/" target="_blank">Lang</a> do projeto <a href="http://commons.apache.org" target="_blank">Apache Commons</a>, esse camarada possui algumas classes que fazem o trabalho árduo pra você.</p>
<p>Veja a dificuldade de fazer isso:</p>
<pre>public abstract class Entidade implements Serializable {

	/**
	 * Retorna o valor de id.
	 *
	 * @return o valor de id.
	 */
	public abstract Id getId();

	/**
	 * @see java.lang.Object#hashCode()
	 */
	public int hashCode() {
		// Para quem utiliza Hibernate este forma de uso do HashCodeBuilder
		// não é recomendada devido a problemas de "lazy initialization" de coleções.
		// return HashCodeBuilder.reflectionHashCode(this);
		return new HashCodeBuilder(17, 31).append(getId())
		        .append(super.hashCode()).toHashCode();
	}

	/**
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	public boolean equals(Object other) {
		return EqualsBuilder.reflectionEquals(this, other);
	}

	/**
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return ToStringBuilder.reflectionToString(this,
		        ToStringStyle.MULTI_LINE_STYLE);
	}
}</pre>
<p>Simples assim!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/felipemsantos.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/felipemsantos.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/felipemsantos.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/felipemsantos.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/felipemsantos.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/felipemsantos.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/felipemsantos.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/felipemsantos.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/felipemsantos.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/felipemsantos.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/felipemsantos.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/felipemsantos.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/felipemsantos.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/felipemsantos.wordpress.com/89/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipemsantos.wordpress.com&amp;blog=7768986&amp;post=89&amp;subd=felipemsantos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://felipemsantos.wordpress.com/2011/03/02/tostringequalshashcode-nao-mao-tsc-tsc-tsc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c4579ad2a07d16f89304d59c29ff4c4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">felipemsantos</media:title>
		</media:content>
	</item>
		<item>
		<title>Apache Maven &#8211; O canivete suíço</title>
		<link>http://felipemsantos.wordpress.com/2009/10/05/apache-maven-o-canivete-suico/</link>
		<comments>http://felipemsantos.wordpress.com/2009/10/05/apache-maven-o-canivete-suico/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 22:25:07 +0000</pubDate>
		<dc:creator>Felipe Santos</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven2]]></category>
		<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">http://felipemsantos.wordpress.com/?p=42</guid>
		<description><![CDATA[Pense em tudo aquilo que você ou alguem na sua equipe precisa fazer para gera uma &#8220;release&#8221; do software que você está desenvolvendo, pense nas horas perdidas, nos problemas ocorridos durante esse processo, pense nas reclamações de pessoas que não tem idéia de nada do que é feito para que o seu trabalho chegue nas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipemsantos.wordpress.com&amp;blog=7768986&amp;post=42&amp;subd=felipemsantos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Pense em tudo aquilo que você ou alguem na sua equipe precisa fazer para gera uma &#8220;release&#8221; do software que você está desenvolvendo, pense nas horas perdidas, nos problemas ocorridos durante esse processo, pense nas reclamações de pessoas que não tem idéia de nada do que é feito para que o seu trabalho chegue nas mão do seu cliente. Agora pense que nada disso é mais necessário e que existe uma ferramenta, um utilitário ou como você preferir chamar que fará todo esse &#8220;trabalho&#8221; para você.</p>
<p>Pensou?! Sério, pensou?! Que tal mais alguns minutos?</p>
<p>Ok, agora pense no que você poderia estar fazendo se essa ferramenta realmente existir? Sei lá, tomar um café, conversar com os amigos de trabalho pra descontrair um pouco, fazer algo realmente útil e produtivo!</p>
<p>Apache Maven2, esse é o cara! A Apache Software Fundation (ASF) a alguns anos criou o ANT, uma ferramenta de build que consegue através de um arquivo de regras como &#8220;&gt;realizar inúmeras tarefas e a utilizou para padronizar (ou pelo menos tentar padronizar) os diversos frameworks e projetos que ela (a ASF) mantém, porém as coisas nem sempre saiam como o esperado, como o ANT tem uma caracterísitica que fexibiliza e garante uma vasta possibilidade de configurações sobre como realizar uma determinada tarefa acabou que essa padronização não aconteceu como esperado. Ai então surgiu a idéia de criar algo que garantisse um padrão (independente do tipo de projeto) para tarefas referentes a construção de uma “distribuição” de um projeto, algo que fosse extensível, “plugável”, que possibilitassem o gerenciamento de questões como dependências e documentação técnica de um projeto, foi assim que o Maven foi criado.</p>
<p>Assim como o ANT o Maven se baseia em um arquivo (pom.xml) para realizar seu trabalho, porém, diferente dos famosos build.xml do ANT, onde a configuração dos “targets” é extremamente verborrágica, a configuração é feita de modo declarativa e muito mais simples.</p>
<p>Antes de continuar a ler este post:</p>
<ul>
<li>realize o download do Maven no site <a href="http://maven.apache.org/download.html" target="_blank">http://maven.apache.org/download.html</a></li>
<li>A instalação é simples, basta descompactar o arquivo que você baixou (ZIP, TAR.GZ ou TAR.BZ2) em um diretório qualquer (por exemplo, /opt/apache-maven-2.2.1 ou c:\apache-maven-2.2.1)</li>
<li>Ajuste o PATH do seu SO:</li>
<li>no Linux (no meu caso Ubuntu), adicione no final do arquivo /etc/profile as linhas</li>
<blockquote><p>export M2_HOME=/opt/apache-maven-2.2.1<br />
export PATH=$M2_HOME/bin:$PATH</p></blockquote>
<li>no Windows basta criar a variável de ambiente M2_HOME apontando para o diretório c:\apache-maven-2.2.1 e alterar o PATH para %M2_HOME%\bin;%PATH%.</li>
</ul>
<p>Para verificar se a intalação está correta digite mvn -v em um prompt de comando ou terminal e você deve ver o seguinte resultado:</p>
<blockquote><p>felipe@ubuntu:~$ mvn -v (ou mvn &#8211;version)<br />
Apache Maven 2.2.1 (r801777; 2009-08-06 16:16:01-0300)<br />
Java version: 1.6.0_16<br />
Java home: /opt/jdk/jdk1.6.0_16/jre<br />
Default locale: pt_BR, platform encoding: UTF-8<br />
OS name: &#8220;linux&#8221; version: &#8220;2.6.28-15-generic&#8221; arch: &#8220;i386&#8243; Family: &#8220;unix&#8221;</p></blockquote>
<p>Para começarmos a entender como o Maven trabalha e como podemos nos beneficiar da forma como ele trabalha vamos analisar os seguintes pontos que considero como básicos:</p>
<ul>
<li>Project Object Model (POM)</li>
<li>Diretórios de um projeto Maven</li>
<li>Dependências e Repositórios</li>
<li>Ciclo de vida de um “build”</li>
<li>Exstensibilidade (Plugins)</li>
</ul>
<p>Considerando que você já fez o download e instalou o Maven na sua máquina, vamos começar.</p>
<p><strong>Project Object Model (POM)</strong></p>
<p>Em termos simples o POM é a forma como o Maven compreende o que é o seu projeto. Essa estrutura define algumas informações utilizadas pelo Maven durante a o processo de “build”, por exemplo para um projeto simples (uma biblioteca de componentes, por exemplo) O Maven tem que saber qual o nome deve ser utilizado pra gerar o “JAR” do projeto, essa informação é definida pela propriedade “artifactId”. O arquivo onde ficam descritas estas informações é o pom.xml que fica sempre na pasta raiz do seu porjeto. Veja o exemplo abaixo:</p>
<div id="attachment_58" class="wp-caption aligncenter" style="width: 610px"><img class="size-full wp-image-58" title="Arquivo pom.xml" src="http://felipemsantos.files.wordpress.com/2009/10/maven-00.png?w=600&#038;h=226" alt="Arquivo pom.xml" width="600" height="226" /><p class="wp-caption-text">Arquivo pom.xml</p></div>
<p>OK, muita informação de uma vez. Vamos por partes:</p>
<ul>
<li>&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; é a versão do modelo POM em que o seu projeto será descrito para o Maven.</li>
<li>&lt;groupId&gt;fms.exemplo&lt;/groupId&gt; informa ao Maven que o seu projeto pertence ao grupo fms.exemplo. Essa informação em conjunto com o artifactId e a version é utilizada para organizar o seu projeto no repositório de dependências (falaremos sobre isso mais afrente).</li>
<li>&lt;artifactId&gt;fms-maven-exemplo&lt;/artifactId&gt; é o nome do seu projeto para o Maven.</li>
<li>&lt;packaging&gt;jar&lt;/packaging&gt; é a forma o seu projeto deve ser empacotado.</li>
<li>&lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt; é a versão do seu projeto.</li>
<li>&lt;name&gt;Exemplo de Projeto Maven&lt;/name&gt; é nome de exibição do projeto.</li>
<li>&lt;url&gt;http://localhost/fms/fms-maven-exemplo/&lt;/url&gt; é o link do site do projeto.</li>
<li>&lt;dependency&gt;é uma declaração de dependência do seu projeto.
<ul>
<li>&lt;groupId&gt;junit&lt;/groupId&gt; tem a memsa função que o groupId declarado anteriormente.</li>
<li>&lt;artifactId&gt;junit&lt;/artifactId&gt; tem a memsa função que o artifactId declarado anteriormente.</li>
<li>&lt;version&gt;3.8.1&lt;/version&gt;tem a memsa função que o version declarado anteriormente.</li>
<li>&lt;scope&gt;test&lt;/scope&gt; é o escopo em que essa dependência deve ser utilizada pelo seu projeto.</li>
</ul>
</li>
</ul>
<p>Existem outras propriedades que podem ser (e com certeza são) muito úteis, porém vamos nos ater apenas as questões básicas nesse post.</p>
<p><strong>Diretórios de um porjeto Maven</strong></p>
<p>Se você já realizou o download e descompactou o exemplo citado no início do post, abra a pasta do projeto e você verá algo do tipo:</p>
<div id="attachment_60" class="wp-caption aligncenter" style="width: 186px"><img class="size-full wp-image-60" title="Estrutura de diretórios" src="http://felipemsantos.files.wordpress.com/2009/10/maven-01.png?w=600" alt="Estrutura de diretórios"   /><p class="wp-caption-text">Estrutura de diretórios</p></div>
<p>Como você já deve ter percebido a estrtura de diretórios é bastante intuitiva. Porém não custa nada explicar:</p>
<ul>
<li>src – é do diretório padrão de código-fontes.</li>
<li>main – é o diretório principal do seu projeto.</li>
<li>java – é o diretório onde ficam os fontes java da sua aplicação.</li>
<li>resources – é o diretório onde ficam os arquivos propriedades, XML, etc. da sua aplicação.</li>
<li>test – é o diretório de testes do seu projeto.</li>
<li>java – é o diretório onde ficam os fontes de teste da sua aplicação.</li>
<li>resources – é o diretório onde ficam os arquivos de propriedades, XML, etc. utilizados pelos testes de sua aplicação.</li>
<li>target – é o diretório onde ficam os arquivos resultantes de qualquer tarefa executada durante o build do seu projeto.</li>
</ul>
<p>O Maven trabalha com essa estrutura de diretórios para facilitar a sua vida. Veja que arquivos de código-fonte e de configuração de testes ficam separados do código de sua aplicação, dessa forma o Maven sabe gerenciar o que é um teste e qual devem ser as dependências utilizadas durante um teste ou compilação do projeto.</p>
<p>Existem outros diretórios que podem ser utilizados, mas como falei antes, estamos apenas tentando entender o básico. Também é possivel alterar essa estrutura de diretórios para uma disposição de sua preferência, porém, para isso, é necessário declarar no pom.xml que diretórios são estes e para que devem ser utilizados, outro problema é que o Maven (e vários plugins desenvolvidos para ele) já veêm esses diretórios por padrão, logo, não é muito recomendado alterar esta estrutura.</p>
<p><strong>Dependências e Repositórios</strong></p>
<p>O Maven trabalha com um mecanismo de gerenciamento de dependências bem interessante. Vamos entender isso através de um exemplo:</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<blockquote><p>&lt;dependencies&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;junit&lt;/groupId&gt;<br />
&lt;artifactId&gt;junit&lt;/artifactId&gt;<br />
&lt;version&gt;3.8.1&lt;/version&gt;<br />
&lt;scope&gt;test&lt;/scope&gt;<br />
&lt;/dependency&gt;<br />
&lt;/dependencies&gt;</p></blockquote>
<p>As linhas acima indicam que um projeto depende do framework jUnit versão 3.8.1 para compilar e executar os seu testes. Bem simples, não?! O Maven entende que durante a fase de compilação e execução dos testes ele precisa montar o “classpath” com este JAR. Opa, vamos com calma, de onde que vem esse JAR? Mágica?! O Maven trabalha com o conceito de “Repositórios de Dependências”. É o mecanismo pelo qual é possível identificar uma dependência e utilizá-la. No caso do jUnit, o Maven irá verificar se você já possui esse JAR em um repositório local (na sua máquina), caso contrário ele ira acessar o repositório central (<a href="http://repo1.maven.org/maven2" target="_blank">http://repo1.maven.org/maven2</a>) e irá buscar o grupo (groupId) junit e dentro dele o artefato (artifactId) junit e para este artefato a versão (version) 3.8.1.</p>
<div id="attachment_63" class="wp-caption aligncenter" style="width: 610px"><a href="http://repo2.maven.org/maven2/junit/junit/3.8.1/"><img class="size-full wp-image-63" title="Repositório Central do Maven2" src="http://felipemsantos.files.wordpress.com/2009/10/maven-02.png?w=600&#038;h=272" alt="jUnit no Repositório Central do Maven2" width="600" height="272" /></a><p class="wp-caption-text">jUnit no Repositório Central do Maven2</p></div>
<p>Observe que a disposição da dependência no repositório está totalmente relacionada ao groupId, artifactId e version de um projeto. Logo, o seu projeto também pode se tornar uma dependência de outros projetos. O mecanismo de dependências trabalha da seguinte forma, quando uma tarefa de build é iniciada, o Maven verifica se as dependências necessárias para a realização do build estão presentes no seu repositório local, que, por padrão fica em $HOME/.m2/repository (esse local pode ser alterado via configuração), caso você não possua a dependência, o Maven irá verificar a dependência no repositório central, encontrada a dependência a mesma será baixada para o repositório local e a tarefa será executada. Isso acontece para cada dependência do seu projeto.</p>
<p>As dependências de um projeto Maven possuem um escopo, e esse escopo auxiliam o Maven a compreender o que faz e o que não faz parte do “classpath” de um projeto. Por exemplo, se você estiver trabalhando em um seu &#8220;&gt;sistema Web é possivel que você necessite das dependências da API de Servlets e JSP, porém você não deve distribuir seu sistema com esses JARs, logo, o Maven deve entender isso para não fazer besteira ao tentar empacotar o seu projeto. Os possíveis escopos de uma depêndencia são:</p>
<ul>
<li>compile (default) – caso nenhum escopo seja especificado este será utilizado. São dependências utilizadas em todos os “classpaths” de um projeto.</li>
<li>provided – significa que o ambiente de execução do seu projeto (um Web Container, por exemplo) provê essa dependência. Este escopo também é utilizado para o classpath compilação e testes.</li>
<li>runtime – como o proprio nome diz, indica que a dependência é necessária apenas em tempo de execução.</li>
<li>test – indica que a dependência é utilizada apenas para compilar e executar testes.</li>
<li>system – semelhante ao escopo “provided”, porém nesse caso você deve prover esta dependência, pois o Maven não ira buscá-la em um repositório.</li>
<li>import – apenas disponível a partir do Maven 2.0.9, é utilizada apenas para dependências do tipo POM e para trabalhar com substituição de dependências e dependências transitivas.</li>
</ul>
<p>Leia mais sobre o Mecanismo de Dependências do Maven em <a href="http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html" target="_blank">http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html</a>.</p>
<p><strong>Ciclo de vida de um “build”</strong><br />
Chegando neste ponto você deve estar se pensando, “tudo bem, o Maven até agora não faz nada que eu não possa fazer sem ele! O que que ele faz que possa realmente me ajudar?” O Maven trabalha com o conceito de Ciclo de Vida de Build, ou seja, existem passos que são executados em sequência e que respeitam cada fase de um ciclo de vida para a construção, empacotamento e distribuição de qualquer tipo de projeto (Web, EJB, Mobile, etc.). Basta compreender um pequeno conjunto de comandos para que o Maven realize um conjunto de tarefas encadeadas para gerar o que for necessário.</p>
<p>Vejamos um exemplo, digamos que seja necessário gerar um site com informações sobre o seu projeto após o “build”, para isso basta incluir a tarefa “site” ao comando de build e pronto. Para verificar isso, no diretório raiz do seu projeto, digite o comando “mvn clean install site”, após o termino da operação você verá a mensagem:</p>
<blockquote><p>[INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
[INFO] BUILD SUCCESSFUL<br />
[INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p></blockquote>
<p>Agora entre no diretório “target/site” do projeto e abra o arquivo index.html no seu navegador. O resultado é algo do tipo:</p>
<div id="attachment_64" class="wp-caption aligncenter" style="width: 610px"><img class="size-full wp-image-64" title="Site do projeto Maven" src="http://felipemsantos.files.wordpress.com/2009/10/maven-03.png?w=600&#038;h=450" alt="Site do projeto Maven" width="600" height="450" /><p class="wp-caption-text">Site do projeto Maven</p></div>
<p>Este site é gerado com base nas informações descritas no pom.xml, assim, é possível gerar relatórios (como PMD, Checkstyle, FindBugs, JavaDoc, etc) e ter informações (caso você utilize um Servidor de Integração Contínua) continuamente renovadas sobre seu projeto, inclusive resultado de testes unitários equipe do projeto, localização do seu servidor de controle de versões, etc.</p>
<p>Mas voltando ao assunto, o Ciclo de Vida padrão do Maven se resume às seguintes fases:</p>
<ul>
<li>validate – valida se o projeto está correto e se toda a informação necessária para o build esta acessível.</li>
<li>compile – compila o código-fonte do projeto.</li>
<li>test – testa o código compilado usando frameworks de teste unitário (configurados nas dependências do projeto).</li>
<li>package – emapcota o código-fonte compilado no formato em que ele deve ser ditribuido (JAR, WAR, EJB, etc.). O Maven entende a forma em que o seu projeto dever ser empacotado com base na tag do pom.xml.</li>
<li>integration-test – processa e implanta o pacote, se necessário, em um ambiente de execução onde os testes podem ser executados.</li>
<li>verify – executa qualquer verificação para avaliar que o pacote é valido e realiza testes baseados em critários de qualidade.</li>
<li>install – instala o pacote no seu repositório local, assim é possível utilizar o seu projeto como dependêcnia de outro projeto localmente.</li>
<li>deploy – feitos os testes e verificações, e gerado uma versão (release) do projeto, copia o pacote para um repositório remoto para compartilhamento do projeto com outros desenvolvedores.</li>
</ul>
<p>Esta última fase é bastante útil quando existe um repositório de dependências da empresa em um local acessivel em uma rede local. Outra informação útil neste ponto é que quando o comando “mvn clean install site” foi executao o que fizemos foi informar ao Maven que o build deveria ser realizado partindo da fase de limpeza (clean) até a instalação no repositório local (install), assim todas as fases entre “clean” e “install” também são executadas.</p>
<p>Esta é uma visão bem &#8220;macro&#8221; do Ciclo de Vida de Build que o Maven utiliza, pois, dentro de cada fase existem algumas tarefas que são executadas, caso ocorra um erro ou uma tarefa falhe, dependendo da falha o “build é quebrado”, pois as fazes são encadeadas e respeitam o resultado da fase anterior.</p>
<p>Para mas informações leia sobre Ciclo de Vida de Builds Maven em <a href="http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html" target="_blank">http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html</a>.</p>
<p>Agora que entendemos um pouco como funciona um build com o Maven, a conclusão que podemos chegar é que para qualquer que seja o tipo de empacotamento do seu projeto (ou qualquer que seja o tipo de projeto) esse ciclo de vida sempre é respeitado, ou seja, sempre teremos que limpar a estrutura de diretórios, compilar os fontes, testar, empacotar, etc. Assim o Maven trata de forma uniforme e consistente qualquer projeto.</p>
<p><strong>Exstensibilidade (Plugins)</strong></p>
<p>O Maven foi feito para ser extensível, pois a idéia é que em cada fase você possa fazer mais do que o básico. Outro conceito que o Maven apresenta é que para cada fase (phase) existem várias metas (goals) a serem atingidas, assim é possivel trabalhar com plugins extendendo as fases do “build” para atingir resultados mais interessantes. Um exemplo de uso dos plugins é que você pode informar ao Maven como ele deve trabalhar de forma mas específica, por exemplo, digamos que na sua empresa todos os fontes devem ser escritos para a VM 1.5, independente do JDK utilizado pelo Maven, isso pode ser configurado da seguinte forma:</p>
<div id="attachment_65" class="wp-caption aligncenter" style="width: 363px"><img class="size-full wp-image-65" title="Configuração do maven-compiler-plugin" src="http://felipemsantos.files.wordpress.com/2009/10/maven-06.png?w=600" alt="Configuração do maven-compiler-plugin"   /><p class="wp-caption-text">Configuração do maven-compiler-plugin</p></div>
<p>Ou seja, acabamos de dizer ao Maven que o plugin “maven-compiler-plugin” deve informar ao compilador que o código-fonte deve ser compilado para a VM 1.5.</p>
<p>Outro aspecto interessante é que os plugins não se limitam apenas em ampliar o trabalho realizado em uma fase do build, mas também, de realizar tarefas que não são padrões do build. Por exemplo, podemos adicionar o plugin do PMD para realizar testes de métricas de qualidade no código-fonte e gerar relatórios no site do projeto. Para executar o PMD e seus relatórios sobre o nosso código-fonte basta adicionar as seguintes linhas no pom.xml do seu projeto:</p>
<div id="attachment_66" class="wp-caption aligncenter" style="width: 350px"><img class="size-full wp-image-66" title="Configuração do maven-pmd-plugin" src="http://felipemsantos.files.wordpress.com/2009/10/maven-07.png?w=600" alt="Configuração do maven-pmd-plugin"   /><p class="wp-caption-text">Configuração do maven-pmd-plugin</p></div>
<p>Após incuir essa configuração execute “mvn clean install site” novamente e verifique o site do projeto no navegador.</p>
<div id="attachment_68" class="wp-caption aligncenter" style="width: 610px"><img class="size-full wp-image-68" title="Site do projeto com o Relatório do PMD" src="http://felipemsantos.files.wordpress.com/2009/10/maven-0x.png?w=600&#038;h=351" alt="Site do projeto com o Relatório do PMD" width="600" height="351" /><p class="wp-caption-text">Site do projeto com o Relatório do PMD</p></div>
<p>Você verá que uma nova área foi criada (Project Reports) e nela existe um link para os relatórios gerados pelo PMD. Para uma lista de plugins acesse <a href="http://maven.apache.org/plugins" target="_blank">http://maven.apache.org/plugins</a>.</p>
<p>Uma outra informação que pode estimular a sua curiosidade é que o Maven é acapaz de gerar sites extremamente complexos e ricos de informações, acesse o site do Maven (<a href="http://maven.apache.org" target="_blank">http://maven.apache.org</a>). Ele é totalmente gerado com Maven. Agora você deve perceber que outros sites de inúmeros frameworks e componentes Java possuem uma estrutura semelhante e é exatamente o que você está pensando! Todos são gerados pelo Maven!</p>
<p>Podemos concluir que o Maven é uma ferramenta que auxilia muito o passo-a-passo chato e massante da geração ou construção de releases de um projeto. Combinando os plugins corretos e uma ferramenta de Integração Contínua (Hudson, por exemplo) você pode ter informações relevantes sobre seus projetos de forma consistente, padronizada e inteligente.</p>
<p>Uma sugestão para quem quer começar a utilizar esse camarada e usa Eclipse é instalar o plugin <a href="http://m2eclipse.sonatype.org" target="_blank">M2Eclipse</a> que faz integração com Maven. Ele ajuda na configuração do pom.xml, chamadas ao Maven para realizar builds, inclusão de dependências e para quem não está acostumado ainda com as possíveis opções de configuração do pom.xml ele possue um assitente visual bem interessante, outro ponto forte é que ele faz integração com o plugin <a href="http://subclipse.tigris.org" target="_blank">Subclipse</a> instala no “help” do Eclipse o livro “Maven: The Definitive Guide”, para quem está começando é um ótimo material.</p>
<p>Outro aspecto muito interessante é que, como o Maven implementa um padrão de trabalho, para equipes que desejam implantar um processo ou metodologia ágil e integrada ele se encaixa perfeitamente. Basta um esforço inical, para definição de um padrão de relatórios e tarefas que fazem parte sempre do build dos sistemas produzidos pela sua equipe e pronto.</p>
<p>Para mais informações acesse o site do <a href="http://maven.apache.org" target="_blank">Maven</a>.</p>
<p>Deixe um comentário ou dúvidas, critique, colabore!<br />
Até mais.</p>
<div id="_mcePaste" style="overflow:hidden;position:absolute;width:1px;height:1px;top:684px;left:-10000px;">&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
&lt;groupId&gt;fms.exemplo&lt;/groupId&gt;<br />
&lt;artifactId&gt;fms-maven-exemplo&lt;/artifactId&gt;<br />
&lt;packaging&gt;jar&lt;/packaging&gt;<br />
&lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;<br />
&lt;name&gt;fms-maven-exemplo&lt;/name&gt;<br />
&lt;url&gt;http://localhost/fms/fms-maven-exemplo&lt;/url&gt;<br />
&lt;dependencies&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;junit&lt;/groupId&gt;<br />
&lt;artifactId&gt;junit&lt;/artifactId&gt;<br />
&lt;version&gt;3.8.1&lt;/version&gt;<br />
&lt;scope&gt;test&lt;/scope&gt;<br />
&lt;/dependency&gt;<br />
&lt;/dependencies&gt;</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/felipemsantos.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/felipemsantos.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/felipemsantos.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/felipemsantos.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/felipemsantos.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/felipemsantos.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/felipemsantos.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/felipemsantos.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/felipemsantos.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/felipemsantos.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/felipemsantos.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/felipemsantos.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/felipemsantos.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/felipemsantos.wordpress.com/42/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipemsantos.wordpress.com&amp;blog=7768986&amp;post=42&amp;subd=felipemsantos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://felipemsantos.wordpress.com/2009/10/05/apache-maven-o-canivete-suico/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c4579ad2a07d16f89304d59c29ff4c4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">felipemsantos</media:title>
		</media:content>

		<media:content url="http://felipemsantos.files.wordpress.com/2009/10/maven-00.png" medium="image">
			<media:title type="html">Arquivo pom.xml</media:title>
		</media:content>

		<media:content url="http://felipemsantos.files.wordpress.com/2009/10/maven-01.png" medium="image">
			<media:title type="html">Estrutura de diretórios</media:title>
		</media:content>

		<media:content url="http://felipemsantos.files.wordpress.com/2009/10/maven-02.png" medium="image">
			<media:title type="html">Repositório Central do Maven2</media:title>
		</media:content>

		<media:content url="http://felipemsantos.files.wordpress.com/2009/10/maven-03.png" medium="image">
			<media:title type="html">Site do projeto Maven</media:title>
		</media:content>

		<media:content url="http://felipemsantos.files.wordpress.com/2009/10/maven-06.png" medium="image">
			<media:title type="html">Configuração do maven-compiler-plugin</media:title>
		</media:content>

		<media:content url="http://felipemsantos.files.wordpress.com/2009/10/maven-07.png" medium="image">
			<media:title type="html">Configuração do maven-pmd-plugin</media:title>
		</media:content>

		<media:content url="http://felipemsantos.files.wordpress.com/2009/10/maven-0x.png" medium="image">
			<media:title type="html">Site do projeto com o Relatório do PMD</media:title>
		</media:content>
	</item>
		<item>
		<title>Construindo o mundo perfeito</title>
		<link>http://felipemsantos.wordpress.com/2009/10/02/construindo-o-mundo-perfeito/</link>
		<comments>http://felipemsantos.wordpress.com/2009/10/02/construindo-o-mundo-perfeito/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 22:13:51 +0000</pubDate>
		<dc:creator>Felipe Santos</dc:creator>
				<category><![CDATA[Boas Práticas]]></category>
		<category><![CDATA[Metodologia]]></category>
		<category><![CDATA[Processo]]></category>

		<guid isPermaLink="false">http://felipemsantos.wordpress.com/?p=38</guid>
		<description><![CDATA[Todo os dias, escutamos desenvolvedores, gerentes, estagiários, analistas, e quem mais estiver envolvido com o mundo técnico do desenvolvimento de software reclamando de alguma coisa e falando &#8220;&#8230; se nós utilizarmos o framework XYZ &#8230;&#8221; ou &#8220;&#8230; se aplicarmos a metodoliga KXH&#8230;&#8221;, enfim sempre alguém tem uma &#8220;Bala de Prata&#8221; que mata todos os problemas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipemsantos.wordpress.com&amp;blog=7768986&amp;post=38&amp;subd=felipemsantos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div style="text-align:justify;">Todo os dias, escutamos desenvolvedores, gerentes, estagiários, analistas, e quem mais estiver envolvido com o mundo técnico do desenvolvimento de software reclamando de alguma coisa e falando &#8220;&#8230; se nós utilizarmos o framework XYZ &#8230;&#8221; ou &#8220;&#8230; se aplicarmos a metodoliga KXH&#8230;&#8221;, enfim sempre alguém tem uma &#8220;Bala de Prata&#8221; que mata todos os problemas possíveis e impossíveis que vemos pela frente.</div>
<div style="text-align:justify;">Bom, a idéia aqui é iniciar uma discussão sobre como montar um ambiente de trabalho, simples, colaborativo e objetivo com base em práticas e técnicas que existem para que as pessoas que sempre reclamam e sugerem o mundo do &#8220;avesso&#8221; para resolver estes problemas, possam ver que tudo pode ser feito de forma simples e objetivas, fazendo com que todos os envolvidos participem de todo o processo, assumindo seus devidos papéis e responsabilidades.</div>
<div style="text-align:justify;">É impossivel falar de ambiente de trabalho para quem trabalha com desenvolvimento de software sem falar de processo, documentação ou ferramentas de apoio, sendo assim, vamos começar.</div>
<div style="text-align:justify;">Graças a Deus hoje escutamos e vemos muitas pessoas da área de TI falando sobre processos ágies, o que é excelente quando realmente aplicamos tais processos. A idéia de desburocratizar o dia-a-dia de trabalho é ótima, porém antes disso é necessário criar uma cultura de trabalho mais simples e não forçar as pessoas a trabalhar de uma maneira totalmente diferente em relação ao que elas estam habituadas.</div>
<div style="text-align:justify;">O SCRUM e o XP são exemplos claros de que criar uma cultura de trabalho é muito melhor do que impor uma maneira de fazer as coisas. É inegável que processos mas conservadores contribuiram muito para os avanços que obtemos hoje, quando falamos em processos e metodologias, porém figuras como RUP criaram passos gigantescos entre o mundo de negócios e as implementações em código e que cada vez mais vemos esses abismos crescendo (o que normalmente implica em prazos estrapolados, recursos realocados, clientes insatisfeitos, etc.).</div>
<div style="text-align:justify;">Outro ponto de vista, o técnico, mostra que quanto mais burocracia mais problema, exemplo: a velha e boa arquitetura J2EE vs. Arquiteturas apoiadas em DDD. É fato que tudo feito antes do surgimente de técnicas como o DDD criaram verdadeiros monstros como Arquitetos e Consultores, porém mais uma vez caimos na situação de ver o mundo dar milhões de voltas para conseguirmos dar pequeno passo.</div>
<div style="text-align:justify;">A simplicidade de implementação que vemos em técnicas de engenharia de software dirigidas ao negócio ou a testes é o objetivo de milhões de ferramentas, porém, quanto custam estas ferramentas? E outra, o resultado é realmente eficiente? O que pode ser melhor do que ter nas mão um conjunto de práticas que resultam na simplicidade de implementação de uma regra de negócio que atende a demanda que o seu cliente tanto sonha em ver funcionando? Opa olha a cultura aparecendo novamente!</div>
<div style="text-align:justify;">Processos e metodologias ágies são o &#8220;BUM&#8221; do momento, mas por quẽ? Simples, porque funcionam. Vamos pensar assim, se você que está lendo esse post (e possívelmente é <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ) for técnico pense da seguinte forma, você nunca programou na vida, nem sabe da existência das linguagens de programação, você é um administrador que subiu na vida e tem seu próprio negócio, mas depende de um setor de TI na sua empresa que lhe de apoio para que o seu negócio funcione. Você precisa de &#8220;feedback&#8221;, de comunicação, de flexibilidade de trabalho (afinal o mundo dos negócio vive em constante mudança), e não podemos esquecer que tudo são números (ou melhor valores). Metodologias ágeis trazem essas práticas para o dia-a-dia de quem às pratica. Veja o XP por exemplo, feedback, comunicação, coragem e simplicidade são seus principais valores e ajudam na flexibilidade de aceitar mudanças.</div>
<div style="text-align:justify;">Testes, uma prática que infelizmente não vivi muito pelos clientes em que passei, para os gerentes que tive (nem todos) escrever testes ao invez de codificar um caso de uso é perda de tempo. Bom o fato é que ter um caso de testes como &#8220;alvo a ser atingido&#8221; pelo seu código é muito mais simples do que seguir um documento (as vezes mal escrito) é muito melhor, pois garante integridade e valida o seu trabalho. No livro &#8220;XP Explicada&#8221;, Kent Back cita um termo criado pelo Erich Gamma, &#8220;infectados por testes&#8221; que faz referência a pessoas (desenvolvedores, analistas e gerentes) que não conseguem aceitar não utilizar ou escrever testes, a idéia de não se antecipar a um problema é simplesmente inaceitável. Que bom seria trabalhar sempre assim!</div>
<div style="text-align:justify;">Bom por enquanto é só, no proximo post vamos falar sobre onde entra a documentação em tudo isso. Fiquem a vontade para comentar, criticar e sugerir. Até mais.</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/felipemsantos.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/felipemsantos.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/felipemsantos.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/felipemsantos.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/felipemsantos.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/felipemsantos.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/felipemsantos.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/felipemsantos.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/felipemsantos.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/felipemsantos.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/felipemsantos.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/felipemsantos.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/felipemsantos.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/felipemsantos.wordpress.com/38/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipemsantos.wordpress.com&amp;blog=7768986&amp;post=38&amp;subd=felipemsantos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://felipemsantos.wordpress.com/2009/10/02/construindo-o-mundo-perfeito/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c4579ad2a07d16f89304d59c29ff4c4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">felipemsantos</media:title>
		</media:content>
	</item>
	</channel>
</rss>
