<?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/"
	>

<channel>
	<title>Diario de Programación &#187; plugin</title>
	<atom:link href="http://blog.chuidiang.com/tag/plugin/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chuidiang.com</link>
	<description>Programación e informática en general</description>
	<lastBuildDate>Wed, 25 Jan 2012 23:17:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Plugin de maven para cambio de versiones en los pom.xml</title>
		<link>http://blog.chuidiang.com/2008/11/07/plugin-de-maven-para-cambio-de-versiones-en-los-pomxml/</link>
		<comments>http://blog.chuidiang.com/2008/11/07/plugin-de-maven-para-cambio-de-versiones-en-los-pomxml/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 05:23:56 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[maven]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[proyectos]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=420</guid>
		<description><![CDATA[&#160; Hace tiempo que tengo una necesidad en el trabajo y que he ido dejando olvidada por falta de tiempo. Cuando en maven manejas proyectos grandes, cada uno con varios subproyectos&#160; y encima esos proyectos grandes dependen de otros proyectos grandes que tambi&#233;n tienen sus subproyectos, llevar un versionado en condiciones de cada jar puede [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Hace tiempo que tengo una necesidad en el trabajo y que he ido dejando olvidada por falta de tiempo. Cuando en <em>maven</em> manejas proyectos grandes, cada uno con varios subproyectos&nbsp; y encima esos proyectos grandes dependen de otros proyectos grandes que tambi&eacute;n tienen sus subproyectos, llevar un versionado en condiciones de cada jar puede ser un infierno.</p>
<p>Me explico, tu proyecto grande lleva un fichero <em>pom.xml</em>. Cada uno de los subproyectos tambi&eacute;n. En los dem&aacute;s proyectos tambi&eacute;n y en sus subproyectos tambi&eacute;n. Algunos de los jar de alguno de esos subproyectos pueden ser librer&iacute;as b&aacute;sicas, por ejemplo, una librer&iacute;a de componentes <em>swing </em>o de utilidades para acceso a base de datos, de gr&aacute;ficos, o lo que sea. Aparecen dependencias de esa librer&iacute;a en los <em>pom.xml</em> de muchos de los proyectos y subproyectos.</p>
<p>&iquest;Qu&eacute; pasa si cambiamos la versi&oacute;n de esa librer&iacute;a?. Que no queda m&aacute;s remedio que ir en todos los proyectos y subproyectos en los que queremos actualizar la versi&oacute;n buscando dicha librer&iacute;a por los <em>pom.xml</em> y cambiando el n&uacute;mero de versi&oacute;n. Desde luego, una tarea rutinaria, pero algo aburrida, que lleva un tiempo y susceptible de error &quot;humano&quot; al hacerla a mano.</p>
<p>As&iacute; que pens&eacute; en hacer un <em>script </em>o algo que buscara por los <em>pom.xml</em> y cambiara autom&aacute;ticamente las versiones que se le dijeran. As&iacute; que por fin me puse a ello y como siempre, para jugar y aprender algo nuevo, en vez de un <em>script</em>, decid&iacute; hacerlo como <em>plugin de maven</em>.</p>
<p>El resultado es un plugin de maven con dos <em>goals</em>:</p>
<ul>
<li><strong>lista</strong> saca en un fichero un listado de todos los artifacts que aparecen en el <em>pom.xml</em> del proyecto y subproyectos actuales y con la nueva versi&oacute;n o <em>groupId</em> que queremos para cada sub/proyecto. Ese fichero lo utilizar&aacute; el siguiente <em>goal </em>para hacer los cambios en el <em>pom.xml</em>.</li>
<li><strong>cambia </strong>realiza los cambios indicado en el fichero anterior en todos los <em>pom.xml</em> que encuentre del proyecto y subproyecto.&nbsp;
<ul>
<li>Si se ejecuta este <em>goal </em>en el mismo proyecto en que se ejecut&oacute; el <strong>lista</strong>, obtenemos un cambio de versi&oacute;n en el proyecto. Quiz&aacute;s el <a href="http://maven.apache.org/plugins/maven-release-plugin/">plugin release de maven</a> hace esto mismo y mejor.</li>
<li>Si se copia el fichero de cambios en otros proyecto distinto y ejecutamos all&iacute; el <em>goal </em>cambia, conseguimos cambiar la versi&oacute;n de las dependencias con el primer proyecto.</li>
</ul>
</li>
</ul>
<p>Lo he estado usando ya y probando, va bastante bien, aunque veo que el uso no es demasiado intuitivo, siempre se me olvida hacer alguna cosa.</p>
<p>Ah&iacute; van un par de enlaces:</p>
<ul>
<li>Proyecto en chuidiang : <a href="http://proyectos.chuidiang.com/pom_version/index.html">http://proyectos.chuidiang.com/pom_version/index.html</a></li>
<li>Proyecto en google-code: <a href="http://code.google.com/p/chuidiang-pom-version/">http://code.google.com/p/chuidiang-pom-version/</a></li>
</ul>
<p>Aprender, pues aprend&iacute; algunas cosillas, sobre todo, &iquest;c&oacute;mo no?, problemas con los que me he tropezado. El m&aacute;s gordo ha sido que no hay forma de hacer un <em>deploy </em>de un <em>plugin </em>en condiciones. En el <em>pom.xml</em> del <em>plugin</em>, el <em>packaging </em>es &quot;<em>maven-plugin</em>&quot;. Pues el <em>deploy </em>no sabe hacer un <em>deploy </em>de una cosa cuyo packaging es &quot;<em>maven-plugin</em>&quot;, as&iacute; que para que funcione el <em>deploy</em>, debes poner <em>packaging</em> &quot;<em>jar</em>&quot;. Pero claro, eso sube el fichero <em>.pom</em> al repositorio remoto con ese <em>packaging </em>que no es, as&iacute; que luego, a mano y en el repositorio remoto, tienes que cambiar el &quot;<em>jar</em>&quot; por &quot;<em>maven-plugin</em>&quot; otra vez. Y el problema sigue, ya que al cambiar eso a mano, los ficheros de checksum/huella o como quieras llamarle <em>.md5</em> y <em>.sha1</em> que se crean en el repositorio remoto ya no cuadran y al bajarte el plugin con maven dan un <em>warning</em>.</p>
<p>Y yo creo que ya est&aacute; bien de proyectos. Esta tarde me dedicar&eacute; a otra cosa.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2008/11/07/plugin-de-maven-para-cambio-de-versiones-en-los-pomxml/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>maven, jar, assembly y snapshots (II)</title>
		<link>http://blog.chuidiang.com/2008/11/04/maven-jar-assembly-y-snapshots-ii/</link>
		<comments>http://blog.chuidiang.com/2008/11/04/maven-jar-assembly-y-snapshots-ii/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 19:17:22 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[maven]]></category>
		<category><![CDATA[assembly]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=418</guid>
		<description><![CDATA[&#160; Bueno, pues despu&#233;s de compilar el maven-assembly-plugin, lo he intentado en el trabajo y me has pasado las siguientes cosas: Hago el mvn install. Me pide uno de los jar que mencion&#233; en el post anterior. Le hago a ese jar el mvn install:install-file para instalarlo a mano. Sigo compilando y no me pide [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Bueno, pues despu&eacute;s de <a href="http://blog.chuidiang.com/2008/11/01/maven-jar-assembly-y-snapshots/">compilar el maven-assembly-plugin</a>, lo he intentado en el trabajo y me has pasado las siguientes cosas:</p>
<p>Hago el mvn install. Me pide uno de los jar que mencion&eacute; en el post anterior. Le hago a ese jar el mvn install:install-file para instalarlo a mano. Sigo compilando y no me pide el segundo. Sin embargo, fallan los test de compilado.</p>
<p>Vuelvo a recompilar sin pasar los test&nbsp;&nbsp; ( mvn -Dmaven.test.skip=true install ) y compilado, sin test. Me pongo a ejecutar el mvn assembly:assembly en un proyecto &#8230; y excepci&oacute;n, class not found de una de las clases del plugin</p>
<p>Despu&eacute;s de pelearme, buscar ese class not found a ver de d&oacute;nde es para poner la dependencia y desesperarme un rato gordo, se me ocurre hacer el mvn install:install-file del segundo jar mencionado en el post anterior. Cosa curiosa, aunque ese mismo jar me lo baj&oacute; maven de alg&uacute;n repositorio, y aunque el n&uacute;mero de versi&oacute;n coincide, no es el mismo. Con este segundo jar ya compila todo pasando los test y no da excepci&oacute;n en el mvn assembly:assembly. Supongo que este tipo de cosas es lo que tiene el tirar de versiones beta-SNAPSHOT. De todas formas, tambi&eacute;n deja claro que no son demasiado cuidadosos con los jar que suben a internet, ya que con el mismo n&uacute;mero de versi&oacute;n parece que puedes encontrar versiones distintas.</p>
<p>Y al final resulta que no funciona. Efectivamente, el mvn assembly:assembly te mete en el zip las versiones snapshots de los jar de los que dependes sin poner la fecha y manteniendo la palabra snapshot &#8230;. simpre y cuando en tu repositorio local hayas hecho un mvn install de ese snapshot con fecha posterior a la m&aacute;s moderna del repositorio de snapshot. O sea, que para que funcione, tienes que sacar el cvs de todos los proyectos snapshot de los que dependes y hacer mvn install de todos ellos y rezar porque nadie suba una snapshot al repositorio com&uacute;n en el entretanto.</p>
<p>En fin, estoy plante&aacute;ndome hacer un plugin que llame a assembly:directory. Este goal deja todos los ficheros en el target, desempaquetados. Luego, mi plugin, cambiar&aacute; los ficheros-fecha.jar por fichero-snapshot.jar y har&aacute; el zip. Este bug lleva ya al menos un a&ntilde;o en la p&aacute;gina de bugs y todav&iacute;a da la impresi&oacute;n de que no tiene una correcci&oacute;n seria.</p>
<p>Se me ocurri&oacute; mirar a mi los fuentes del plugin assembly a ver si pod&iacute;a hacer un arreglo&#8230;. pero de svn se baja la friolera de unos 6000 ficheros en los que hay 286 ficheros fuente java. No s&eacute;, creo que me da un poco de pereza&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2008/11/04/maven-jar-assembly-y-snapshots-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>assembly, jar y snapshot incompatibles en maven</title>
		<link>http://blog.chuidiang.com/2008/06/19/assembly-jar-y-snapshot-incompatibles-en-maven/</link>
		<comments>http://blog.chuidiang.com/2008/06/19/assembly-jar-y-snapshot-incompatibles-en-maven/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 12:59:02 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[maven]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=391</guid>
		<description><![CDATA[Me he vuelto a tropezar con un peque&#241;o problema que esta vez, tampoco he conseguido resolver. Con maven damos a los proyectos un n&#250;mero de versi&#243;n, de forma que luego el jar generado lleva dicho n&#250;mero de versi&#243;n. As&#237;, por ejemplo, podemos tener un proyecto MiProyecto al que decimos a maven que es versi&#243;n 1.0 [...]]]></description>
			<content:encoded><![CDATA[<p>Me he vuelto a tropezar con un peque&ntilde;o problema que esta vez, tampoco he conseguido resolver.</p>
<p>Con <em><a href="http://www.chuidiang.com/chuwiki/index.php?title=Categor%C3%ADa:Maven">maven</a> </em>damos a los proyectos un n&uacute;mero de versi&oacute;n, de forma que luego el <em>jar </em>generado lleva dicho n&uacute;mero de versi&oacute;n. As&iacute;, por ejemplo, podemos tener un proyecto <em>MiProyecto </em>al que decimos a <em>maven </em>que es versi&oacute;n 1.0 y&nbsp; <em>maven</em> generar&aacute; un <em>jar </em><em>MiProyecto-1.0.jar</em>. Mientras estamos desarrollando este proyecto, podemos decir a <em>maven </em>que es una versi&oacute;n &quot;<em>SNAPSHOT</em>&quot;, de esta forma sabe que ese <em>jar </em>se va a generar muchas veces y que ser&aacute; posiblemente distinto cada vez. Al hacerlo as&iacute;, <em>maven </em>genera el <em>jar </em>a&ntilde;adiendo la fecha y hora del compilado, tal que as&iacute;: <em>MiPoryecto-1.0-20080619-131234.jar</em>.</p>
<p>Esto tiene una ventaja adicional. Si hacemos ahora otro proyecto que depende de la versi&oacute;n <em>SNAPSHOT </em>de <em>MiProyecto</em>, cada vez que compilemos este nuevo proyecto, <em>maven </em>buscar&aacute; si hay un <em>jar </em>m&aacute;s moderno de <em>MiProyecto </em>y se lo bajar&aacute;. De esta forma, sin nosotros molestarnos en actualizar el <em>jar</em>, nuestro nuevo proyecto siempre tendr&aacute; disponible la &uacute;ltima versi&oacute;n <em>snapshot </em>de <em>MiProyecto</em></p>
<p>A <em>maven </em>tambi&eacute;n podemos decirle que nos genere el fichero de manifiesto dentro de nuestro jar principal y podemos decirle que autom&aacute;ticamente ponga el <em>Class-Path</em> con todos los <em>jar </em>que necesite. <em>Maven </em>lo hace correctamente y pone en esta dependencia un <em>MiProyecto-1.0-SNAPSHOT</em>, as&iacute; exactamente, con todas las letras y sin reemplazar <em>SNAPSHOT </em>por ninguna fecha.</p>
<p>Finalmente, hay <a href="http://www.chuidiang.com/chuwiki/index.php?title=Hacer_un_zip_para_distribuir">un <em>plugin </em>de <em>maven </em>llamado </a><em><a href="http://www.chuidiang.com/chuwiki/index.php?title=Hacer_un_zip_para_distribuir">assembly</a> </em>que permite meter autom&aacute;ticamente en un <em>zip </em>nuestro <em>jar</em>, nuestros ficheros de configuraci&oacute;n y todos los <em>jar </em>de los que dependemos. De esta forma, eso ser&iacute;a un <em>zip </em>de distribuci&oacute;n que, entreg&aacute;ndoselo a otra persona, podr&iacute;a simplemente desempaquetarlo donde quisiera y ejecutar nuestro programa teniendo todo lo necesario.</p>
<p>Pues bien, este <em>plugin assembly</em> no est&aacute; de acuerdo con lo del manifiesto del <em>jar</em>. El <em>plugin assembly</em>, al generar el <em>zip</em>, mete dentro la versi&oacute;n <em>snapshot </em>de mi proyecto con <em>MiProyeto-1.0-20080619-131234.jar</em>, con todas las fechas y horas habidas y por haber. Nuestro <em>jar </em>principal busca <em>MiProyecto-1.0-SNAPSHOT.jar</em> y claro, no lo encuentra.</p>
<p>Buscando y rebuscando, al final encuentro que <a href="http://jira.codehaus.org/browse/MSHARED-36">es un </a><em><a href="http://jira.codehaus.org/browse/MSHARED-36">bug</a> </em>de uno de los dos, bien de maven al generar el manifiesto, bien de <em>assembly </em>al guardar el <em>jar </em>de <em>MiProyecto</em>. As&iacute; que de momento me he auto-prohibido generar <em>zips </em>que dependan de <em>snapshots</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2008/06/19/assembly-jar-y-snapshot-incompatibles-en-maven/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

