Posts en la categoría: Java

Ivy y resolución de dependencias

Una receta rápida que nos permite gestionar las dependencias con Ivy en nuestras aplicaciones Play de tal modo que Ivy:

  • se conecte a nuestro repositorio maven donde tenemos artefactos que no se encuentran en el repositorio oficial.
  • busque en la cache local de maven en busca de artefactos que hemos generado pero que no se han publicado en el repositorio.
  • descargue todas las dependencias transitivas.
  • tenga en cuenta clasificadores para distinguir entre artefactos de desarrollo y producción.

En el fichero ivy.xml del proyecto definimos las dependencias marcando con m:classifier aquellas que lo necesiten. En el ejemplo, la primera dependencia es una librería que no ha sido publicada (vive en la cache local), el segundo es un driver JDBC que tenemos en nuestro repo Maven y la tercera una dependencia común.

<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven">
    <info organisation="com.trabesoluciones" module="my_awesome_app"/>
    <dependencies>
      <dependency org="com.trabesoluciones" name="awesome-api"             rev="1.2.1"    m:classifier="dev"/>
      <dependency org="com.oracle"          name="oracle-jdbcdriver-thin"  rev="10.2.0.4" />
      <dependency org="commons-lang"        name="commons-lang"            rev="2.4"      />
    </dependencies>
</ivy-module>

Para que Ant encuentre todo creamos una cadena de resolución en $HOME/.ivy2/ivysettings.xml

<?xml version="1.0" encoding="UTF-8"?>
<ivysettings>
  <settings defaultResolver="customChain"/>
  <resolvers>
    <chain name="customChain" returnFirst="true">
      <ibiblio name="m2local" m2compatible="true" root="file://${user.home}/.m2/repository"/>
      <ibiblio name="trabe"   m2compatible="true" root="http://mvn.trabesoluciones.net/repository"/>
      <ibiblio name="ibiblio" m2compatible="true"/>
    </chain>
  </resolvers>
</ivysettings>

Y por último en la tarea Ant indicamos que use esta configuración:

<target name="deps">
  <ivy:configure file="${env.HOME}/.ivy2/ivysettings.xml"/>
  <ivy:retrieve/>
</target>

Gestión de dependencias en Play

Depués de mi post acerca de gestión de dependencias en Play con Maven tenía pendiente escribir cómo utilizar Ivy para este menester. Hay una nueva web, Cuisine, que recopila recetas para el framework Play y, entre ellas, hay dos para gestionar dependencias: la de Maven que ya conocéis y la prometida con Ivy.

Cada vez hay más documentación para Play, congratulémonos.

Usando un keystore con Play

Este post es para Simón. El otro día mientras le dábamos clase en el Master de Software Libre nos dijo que últimamente no escribíamos mucho. Acto seguido le prometimos un post dedicado. Seguro que se lo tomó a broma :)

Play en su versión actual (1.0.3.1) no soporta keystores, sin embargo, con un poquito de Python podemos modificar el script play para que lo haga.

Alrededor de la línea 468 del fichero $PLAY_HOME/play (en el contexto del método do_java) metemos un código parecido a este:

trustStore = readConf('java.trustStore')
if not trustStore == '':
    if os.path.exists(trustStore):
        print "~ using keystore \"%s\"" % trustStore
        java_args.append('-Djavax.net.ssl.trustStore=%s' % trustStore)
        trustStorePassword = readConf('java.trustStore.password')
        if trustStorePassword == '':
            print "~ WARNING: No java.trustStore.password key found in config. You need a password to use a keystore"
        else:
            java_args.append('-Djavax.net.ssl.trustStorePassword=%s' % trustStorePassword)

Y ya podemos configurar nuestro keystore en el fichero conf/application.conf de nuestra aplicación.

java.trustStore=/home/david/opt/javacerts/development
java.trustStore.password=123456
play run y a correr.
Microsoft Office 2003 Professional Edition Adobe Creative Suite 2 Premium Macromedia Dreamweaver 8 [Mac] Microsoft Office Visio Professional 2007 Microsoft Windows XP Professional SP3 Adobe Flash Media Server 3.0 Adobe Font Folio 11 Microsoft Office 2008 [Mac] Adobe Acrobat 8 Professional [Mac] Adobe InDesign CS3 [Mac]