<?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>Blog de Antonio Manuel Muñiz &#187; OpenCMS</title>
	<atom:link href="http://amunizmartin.wordpress.com/tag/opencms/feed/" rel="self" type="application/rss+xml" />
	<link>http://amunizmartin.wordpress.com</link>
	<description>Desarrollo, Ingeniería y Calidad del Software</description>
	<lastBuildDate>Mon, 30 Nov 2009 19:27:18 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='amunizmartin.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/3f7b8b4861abbf6680395419293e44a6?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Blog de Antonio Manuel Muñiz &#187; OpenCMS</title>
		<link>http://amunizmartin.wordpress.com</link>
	</image>
			<item>
		<title>Módulos OpenCMS y Maven</title>
		<link>http://amunizmartin.wordpress.com/2008/11/06/modulos-opencms-y-maven/</link>
		<comments>http://amunizmartin.wordpress.com/2008/11/06/modulos-opencms-y-maven/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 23:54:40 +0000</pubDate>
		<dc:creator>Antonio Manuel Muñiz Martín</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[OpenCMS]]></category>

		<guid isPermaLink="false">http://amunizmartin.wordpress.com/?p=113</guid>
		<description><![CDATA[Objetivo: modelar el ciclo de vida de un módulo de OpenCMS con Maven2
Si realizamos una búsqueda rápida en google vemos que las palabras OpenCMS y Maven no aparecen juntas facilmente. La única referencia interesante es el plugin desarrollado por Comundus, pero está orientado a la gestión del proyecto OpenCMS completo, no al desarrollo de módulos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amunizmartin.wordpress.com&blog=3563308&post=113&subd=amunizmartin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Objetivo: <strong>modelar el ciclo de vida de un módulo de OpenCMS con Maven2</strong></p>
<p>Si realizamos una búsqueda rápida en google vemos que las palabras OpenCMS y Maven no aparecen juntas facilmente. La única referencia interesante es el <a href="http://www.opencms-wiki.org/Fully_automated_builds_with_the_OpenCms-Maven-Plugin" target="_blank">plugin desarrollado por Comundus</a>, pero está orientado a la gestión del proyecto OpenCMS completo, no al desarrollo de módulos de forma aislada. En este post veremos cómo gestionar dependencias, compilar y empaquetar un módulo de OpenCMS con Maven2.</p>
<p>En el proceso de modelado hay una restricción: el código fuente debe ser compatible con el uso del plugin <a href="http://sourceforge.net/projects/opencmsmoddev/" target="_blank">opencmsmoddev</a> para Eclipse. Esto nos obliga a no seguir la estructura típica de un proyecto Maven sino la que requiere dicho plugin. La estructura requerida es la siguiente:</p>
<pre><span style="color:#999999;">--+ src
--+ system
  |--+ workplace
     |--+ resources
--+ lib
--+ schemas
--+ templates
--+ manifest.xml
--+ pom.xml</span></pre>
<p>Dada esta premisa, necesitamos configurar el P.O.M de una forma un poco <em>especial</em>. En primer lugar debemos indicar donde estan nuestros fuentes y donde poner los compilados:</p>
<pre><span style="color:#999999;">&lt;sourceDirectory&gt;src&lt;/sourceDirectory&gt;
&lt;outputDirectory&gt;classes&lt;/outputDirectory&gt;</span></pre>
<p>Además el resultado de realizar un <strong>mvn package</strong> debe ser un zip desplegable en una instancia de OpenCMS. Para ello utilizaremos el plugin <a href="http://maven.apache.org/plugins/maven-antrun-plugin/" target="_blank">maven-antrun-plugin</a> con la siguiente configuración:</p>
<pre><span style="color:#999999;">&lt;plugin&gt;
    &lt;artifactId&gt;maven-antrun-plugin&lt;/artifactId&gt;
    &lt;version&gt;1.1&lt;/version&gt;
    &lt;executions&gt;
        &lt;execution&gt;
            &lt;id&gt;zip-module&lt;/id&gt;
            &lt;goals&gt;
                &lt;goal&gt;run&lt;/goal&gt;
            &lt;/goals&gt;
            &lt;phase&gt;package&lt;/phase&gt;
            &lt;inherited&gt;false&lt;/inherited&gt;
            &lt;configuration&gt;
                &lt;tasks&gt;
                    &lt;echo&gt;Packaging OpenCMS Module...&lt;/echo&gt;
                    &lt;mkdir dir="target/dist/system/modules/${project.groupId}.${project.artifactId}" /&gt;
                    &lt;copy todir="target/dist/system/modules/${project.groupId}.${project.artifactId}/src"&gt;
                        &lt;fileset dir="src" /&gt;
                    &lt;/copy&gt;
                    &lt;copy todir="target/dist/system/modules/${project.groupId}.${project.artifactId}/classes"&gt;
                        &lt;fileset dir="classes" /&gt;
                    &lt;/copy&gt;
                    &lt;copy todir="target/dist/system/modules/${project.groupId}.${project.artifactId}/schemas"&gt;
                        &lt;fileset dir="schemas" /&gt;
                    &lt;/copy&gt;
                    &lt;copy todir="target/dist/system/modules/${project.groupId}.${project.artifactId}/templates"&gt;
                        &lt;fileset dir="templates" /&gt;
                    &lt;/copy&gt;
                    &lt;copy todir="target/dist/system/workplace"&gt;
                        &lt;fileset dir="system/workplace" /&gt;
                    &lt;/copy&gt;
                    &lt;copy file="manifest.xml" todir="target/dist" /&gt;
                    &lt;zip destfile="target/${project.groupId}.${project.artifactId}.zip" basedir="target/dist" /&gt;
                &lt;/tasks&gt;
            &lt;/configuration&gt;
        &lt;/execution&gt;
    &lt;/executions&gt;
&lt;/plugin&gt;</span></pre>
<p>Esta tarea genera el zip requerido por OpenCMS a partir de lo que anteriormente hemos puesto en <em>target/dist</em>.</p>
<p>Aprovecharemos la gestión de dependencias que nos ofrece Maven, en principio la única dependencia que necesitamos es la del propio núcleo de OpenCMS. He usado como base OpenCMS 7.0.5, no he encontrado esta dependencia en ningún repositorio de Maven (conocido). Para solventar esto debemos instalarla en nuestro repositorio local e incluir la dependencia correspondiente en el P.O.M:</p>
<pre><span style="color:#999999;">&lt;dependency&gt;
    &lt;groupId&gt;org.opencms&lt;/groupId&gt;
    &lt;artifactId&gt;opencms&lt;/artifactId&gt;
    &lt;version&gt;7.0.5&lt;/version&gt;
    &lt;scope&gt;provided&lt;/scope&gt;
&lt;/dependency&gt;</span></pre>
<p>La marcamos como <em>provided </em>ya que en tiempo de ejecución será OpenCMS el que la incluya en el classpath.</p>
<p>OpenCMS requiere que ciertos recursos se coloquen en el directorio src junto a los fuentes, para poder usar filtrado usaremos:</p>
<pre><span style="color:#999999;">&lt;resources&gt;
    &lt;resource&gt;
        &lt;directory&gt;src&lt;/directory&gt;
        &lt;filtering&gt;false&lt;/filtering&gt;
        &lt;excludes&gt;
            &lt;exclude&gt;**/*.java&lt;/exclude&gt;
        &lt;/excludes&gt;
    &lt;/resource&gt;
&lt;/resources&gt;</span></pre>
<p>Al empaquetar el módulo necesitamos incluir todas sus dependencias (excepto la marcadas con scope <em>provided</em>), para ello usaremos <a href="http://maven.apache.org/plugins/maven-dependency-plugin/" target="_blank">maven-dependency-plugin</a>:</p>
<pre><span style="color:#999999;">&lt;plugin&gt;
    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
    &lt;artifactId&gt;maven-dependency-plugin&lt;/artifactId&gt;
    &lt;executions&gt;
        &lt;execution&gt;
            &lt;id&gt;copy&lt;/id&gt;
            &lt;phase&gt;process-resources&lt;/phase&gt;
            &lt;goals&gt;
                &lt;goal&gt;copy-dependencies&lt;/goal&gt;
            &lt;/goals&gt;
            &lt;configuration&gt;
                &lt;excludeScope&gt;provided&lt;/excludeScope&gt;
                &lt;outputDirectory&gt;target/dist/system/modules/${project.groupId}.${project.artifactId}/lib&lt;/outputDirectory&gt;
                &lt;overWriteReleases&gt;true&lt;/overWriteReleases&gt;
                &lt;overWriteSnapshots&gt;true&lt;/overWriteSnapshots&gt;
            &lt;/configuration&gt;
        &lt;/execution&gt;
    &lt;/executions&gt;
&lt;/plugin&gt;</span></pre>
<p>Este es el fichero <a href="http://www.box.net/shared/c2ki0ildc2" target="_blank">pom.xml</a> completo.</p>
Posted in Frameworks, Herramientas Tagged: Maven, OpenCMS <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amunizmartin.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amunizmartin.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amunizmartin.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amunizmartin.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amunizmartin.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amunizmartin.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amunizmartin.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amunizmartin.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amunizmartin.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amunizmartin.wordpress.com/113/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amunizmartin.wordpress.com&blog=3563308&post=113&subd=amunizmartin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://amunizmartin.wordpress.com/2008/11/06/modulos-opencms-y-maven/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d30bd2fcdb387d2f82405c2a65298937?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Antonio Manuel Muñiz Martín</media:title>
		</media:content>
	</item>
	</channel>
</rss>