<?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; assembly</title>
	<atom:link href="http://blog.chuidiang.com/tag/assembly/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>¿Elegancia o sencillez?</title>
		<link>http://blog.chuidiang.com/2009/04/25/%c2%bfelegancia-o-sencillez/</link>
		<comments>http://blog.chuidiang.com/2009/04/25/%c2%bfelegancia-o-sencillez/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 15:49:17 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[trabajo]]></category>
		<category><![CDATA[assembly]]></category>
		<category><![CDATA[izpack]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=567</guid>
		<description><![CDATA[&#160; En el trabajo llevamos varios d&#237;as pele&#225;ndonos con la instalaci&#243;n de una versi&#243;n de nuestro software en uno de nuestros sistemas. El sistema consta de unas diez estaciones de trabajo solaris y unos veinte PCs con Windows. En todos ellos corren aplicaciones nuestras, en su mayor&#237;a java. Estas aplicaciones tienen algunas partes comunes, pero [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>En el trabajo llevamos varios d&iacute;as pele&aacute;ndonos con la instalaci&oacute;n de una versi&oacute;n de nuestro software en uno de nuestros sistemas. El sistema consta de unas diez estaciones de trabajo solaris y unos veinte PCs con Windows. En todos ellos corren aplicaciones nuestras, en su mayor&iacute;a java. Estas aplicaciones tienen algunas partes comunes, pero son distintas en cada una de las estaciones y de los PCs (cada uno est&aacute; especializado en diversas funciones, algunas comunes, otras no y comparten mucha informaci&oacute;n entre ellos). En las estaciones hay bases de datos Oracle, con muchas tablas comunes, pero otras distintas en cada estaci&oacute;n. Y en todo esto reside el problema de la instalaci&oacute;n.</p>
<p>La gente est&aacute; dividida en dos posibles tipos de instalaci&oacute;n.</p>
<p>Junto con algunos, yo soy partidario de implementar las distintas funcionalidades del sistema en jar distintos e instalar en cada estacion/PC s&oacute;lo aquellos jar que son necesarios, de forma que ninguna estaci&oacute;n/PC lleve m&aacute;s jar o ficheros de configuraci&oacute;n que no va a usar. Esta es la soluci&oacute;n que considero elegante, pero es m&aacute;s compleja. Requiere generar instaladores/zips disintos para cada estaci&oacute;n/PC, as&iacute; como ser mucho m&aacute;s cuidadoso en esta generaci&oacute;n de instaladores/zips, muchos jar, muchos grupos de ficheros de configuraci&oacute;n, partes comunes y partes espec&iacute;ficas.</p>
<p>Otros piensan que es mejor hacer un &uacute;nico mega-jar, o unos pocos jar grandes, un &uacute;nico mega-grupo de ficheros de configuraci&oacute;n e instalar todo en todos lados. De esta forma, un &uacute;nico instalador o un &uacute;nico zip vale para todas las estaciones/PCs. Luego es el propio software el que mirando el nombre de la estaci&oacute;n/PC en el que corre, sabe qu&eacute; fichero concreto de configuraci&oacute;n leer, de qu&eacute; clase principal hacer el new y actuar como lo que le toca. Esta instalaci&oacute;n es, desde mi punto de vista, m&aacute;s chapuza, pero es innegable que es infinitamente m&aacute;s sencilla.</p>
<p>Y despu&eacute;s de la pelea de estos d&iacute;as atr&aacute;s para la instalaci&oacute;n seg&uacute;n mi punto de vista (disintos zips/instaladores que instalan en cada estaci&oacute;n/PC s&oacute;lo lo necesario), creo que estoy empezando a cambiar de opini&oacute;n. Los instaladores/zips, desde luego, se hacen con procesos autom&aacute;ticos, pero alguien tiene que decirle a ese proceso qu&eacute; debe meter. Seg&uacute;n evoluciona el software y va llevando m&aacute;s funcionalidades y ficheros, hay que tocar la configuraci&oacute;n de la herramienta que genera los instaladores/zips (<a href="http://izpack.org/">izpack</a>, <a href="http://www.chuidiang.com/chuwiki/index.php?title=Hacer_un_zip_para_distribuir">maven assembly</a>,&#8230;) y hay que hacerlo con cuidado. Este proceso es manual y est&aacute; sujeto a errores humanos, por lo que a nuestros instaladores siempre les acaba faltando alguna cosa y necesitan su proceso de &quot;depuraci&oacute;n&quot;.</p>
<p>En fin, no me gustan las chapuzas y tengo que pensar seriamente la forma de mejorar el proceso de generar los zips/instaladores, pero desde luego, es dif&iacute;cil resistirse a la facilidad de instalaci&oacute;n de &quot;todo va en todos sitios, aunque no se use&quot;. Es mucho m&aacute;s f&aacute;cil instalar un solo mega-jar en todos lados que instalar varios jar distintos en cada estaci&oacute;n/PC.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2009/04/25/%c2%bfelegancia-o-sencillez/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>maven, jar, assembly y snapshots (y III)</title>
		<link>http://blog.chuidiang.com/2008/11/05/maven-jar-assembly-y-snapshots-y-iii/</link>
		<comments>http://blog.chuidiang.com/2008/11/05/maven-jar-assembly-y-snapshots-y-iii/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 19:40:50 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[maven]]></category>
		<category><![CDATA[assembly]]></category>
		<category><![CDATA[rmi]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=419</guid>
		<description><![CDATA[&#160; Bueno, pues al final la soluci&#243;n al problema del assembly, el jar y los snapshots no ha sido tan compleja. Complejo, complejo, lo que se dice complejo, ha sido encontrarla por la web. La implementaci&#243;n una chorrada. Resulta que el plugin assembly admite que digamos c&#243;mo queremos que se llamen los jar que va [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Bueno, pues al final la soluci&oacute;n al problema del <em>assembly</em>, el jar y los <em>snapshots</em> no ha sido tan compleja. Complejo, complejo, lo que se dice complejo, ha sido <a href="http://jira.codehaus.org/browse/MSHARED-36">encontrarla por la web</a>. La implementaci&oacute;n una chorrada.</p>
<p>Resulta que el <em>plugin assembly</em> admite que digamos c&oacute;mo queremos que se llamen los jar que va a meter en el zip, por lo que podemos cambiar el nombre para que no tengan el <em>timestamp </em>yyyymmdd.hhmmss-x y s&iacute; salga la palabra <em>SNAPSHOT</em>. Para ello, en el fichero de configuraci&oacute;n de <em>assembly </em>(<em>dep.xml</em> suelo llamarlo), basta poner algo como esto</p>
<blockquote>
<p>&lt;dependencySets&gt;<br />
&nbsp;&nbsp; &lt;dependencySet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;outputDirectory&gt;/Jar&lt;/outputDirectory&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 255);"> </span><span style="color: rgb(51, 102, 255);">&lt;outputFileNameMapping&gt;${artifact.artifactId}-${artifact.baseVersion}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ${dashClassifier?}.${artifact.extension}&lt;/outputFileNameMapping&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;scope&gt;runtime&lt;/scope&gt;<br />
&nbsp;&nbsp; &lt;/dependencySet&gt;<br />
&lt;/dependencySets&gt;</p>
</blockquote>
<p>&nbsp;El &quot;truco&quot; est&aacute; en el tag <em>&lt;outputFileNameMapping&gt;</em>. Con &eacute;l podemos decir qu&eacute; nombre queremos que tengan los jar y para ello podemos usar variables que nos proporciona el <em>plugin</em> para cada jar. As&iacute;, por ejemplo, <em>${artifact.artifactId}</em> es el <em>artifactId</em> del jar en cuesti&oacute;n.</p>
<p>La diferencia con la opci&oacute;n por defecto es <em>${artifact.baseVersion}</em>. Esta variable contiene la versi&oacute;n con la palabra <em>SNAPSHOT</em>. Si usamos la opci&oacute;n por defecto, <em>${artifact.version}</em>, esta contiene el <em>timestamp</em> en vez de <em>SNAPSHOT</em>.</p>
<p>Curiosamente, descubr&iacute; que tambi&eacute;n forma parte del nombre una cosa que se llama <em>${dashClassifier}</em>. Cuando uso <em>rmi</em>, <a href="http://www.chuidiang.com/chuwiki/index.php?title=Rmic">uso un plugin que genera los stubs</a>. Ese <em>plugin</em> genera dos jar. Uno de ellos, el normal de maven, por ejemplo <em>proyecto-1.0.jar</em>. El otro, con los <em>stubs</em> e <em>interfaces</em> para el cliente <em>rmi</em>, al que llama <em>proyecto-1.0-client.jar</em>. Pues bien, el <em>dashClassifier</em> es ese &quot;<em>-client</em>&quot; que se a&ntilde;ade al nombre del fichero.</p>
<p>M&aacute;s detalles en &quot;<a href="http://www.chuidiang.com/chuwiki/index.php?title=Hacer_un_zip_para_distribuir">Hacer un zip para distribuir</a>&quot;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2008/11/05/maven-jar-assembly-y-snapshots-y-iii/feed/</wfw:commentRss>
		<slash:comments>0</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>maven, jar, assembly y snapshots</title>
		<link>http://blog.chuidiang.com/2008/11/01/maven-jar-assembly-y-snapshots/</link>
		<comments>http://blog.chuidiang.com/2008/11/01/maven-jar-assembly-y-snapshots/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 20:41:57 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[maven]]></category>
		<category><![CDATA[assembly]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=416</guid>
		<description><![CDATA[&#160; Hace tiempo coment&#233; que hab&#237;a un problema entre el plugin de maven que mete el fichero de manifiesto en el jar y el plugin de maven que hace un zip para distribuir. Este problema se presenta cuando entre los jar de los que dependemos hay versiones SNAPSHOT. Estas son versiones de jar que est&#225;n [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Hace tiempo coment&eacute; que hab&iacute;a <a href="http://blog.chuidiang.com/2008/06/19/assembly-jar-y-snapshot-incompatibles-en-maven/">un problema entre el plugin de maven que mete el fichero de manifiesto en el jar y el plugin de maven que hace un zip para distribuir</a>. Este problema se presenta cuando entre los jar de los que dependemos hay versiones SNAPSHOT.</p>
<p>Estas son versiones de jar que est&aacute;n todav&iacute;a en desarrollo y que por tanto no tienen una versi&oacute;n fija estable. Cuando generas un jar de una versi&oacute;n SNAPSHOT y lo subes al repositorio, maven cambia la palabra SNAPSHOT por la fecha de compilado. As&iacute;, por ejemplo, un jar descargador-0.1.0-SNAPSHOT.jar se sube al repositorio de jars como descargador-0.1.0-20081101.155652-1.jar, en el que las cifras, si te fijas, son la fecha y hora de compilado.</p>
<p>Pues bien, el plugin que genera el fichero de manifiesto y lo pone dentro del jar, pone el Class-Path usando descargador-0.1.0-SNAPSHOT.jar, mientras que el plugin assembly que hace el zip para distribuir mete dentro el jar descargador-0.1.0-20081101.155652-1.jar, por lo que al desempaquetarlo todo s&iacute;mplemente no funciona.</p>
<p>Esto es un <a href="http://jira.codehaus.org/browse/MASSEMBLY-211">bug conocido</a> que todav&iacute;a no tiene soluci&oacute;n oficial. Y esto ha hecho que me echara atr&aacute;s en meter un respositorio de snapshots en condiciones, ya que luego no pod&iacute;a generar los zip bien. Sin embargo, el repositorio de snapshot en condiciones se hace muy necesario en proyectos grandes, compuestos por muchos jar y en los que desarrolla mucha gente. La ventaja de un repositorio de estos es que yo puedo tener sacada del sistema de control de versones s&oacute;lo aquella parte en la que estoy trabajando y cuando hago un mvn install o un mvn eclipse:eclipse, maven busca las versiones snapshot m&aacute;s modernas que mis compa&ntilde;eros han hecho para bajarmelas y ponerlas como parte de mi proyecto. Este mecanismo evita que tenga que tener sacados todos los fuentes, o que tenga que preocuparme manualmente de actualizar los jar de los dem&aacute;s. As&iacute; que me he puesto a investigar una posible soluci&oacute;n.</p>
<p>Rebuscando en internet, he visto que hay una versi&oacute;n 2.2-beta-3 que corrige el bug (fijaos que en el enlace anterior el bug est&aacute; marcado como fixed en dicha versi&oacute;n), as&iacute; que me he puesto a buscarla. Dicha versi&oacute;n no est&aacute; disponible todav&iacute;a en ning&uacute;n repositorio de maven, s&oacute;lo <a href="http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-assembly-plugin/">est&aacute;n disponibles sus fuentes a trav&eacute;s de subversion</a>. As&iacute; que a ello, me los bajo y a compilar.</p>
<blockquote>
<p>$ svn co http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-assembly-plugin/ maven_assembly<br />
$ cd maven_assembly<br />
$ mvn install</p>
</blockquote>
<p>y ya la hemos liado. Despu&eacute;s de un buen rato de bajarse jars y cosas de la web, da el error de que no encuentra un artifact. Nueva b&uacute;squeda por internet. Al final encuentro que es un problema tambi&eacute;n real y que hay que <a href="http://clearspace.openqa.org/thread/15739">bajarse a mano un par de jars</a>. Una vez hecho esto y el correspondiente mvn install:install-file para subirlo a mi repositorio local, el compilado ha ido sin problemas.</p>
<p>Ahora s&oacute;lo queda lo m&aacute;s importante: probarlo.<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2008/11/01/maven-jar-assembly-y-snapshots/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

