Guillaume VIEL :: java jee tomcat linux

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 2 mars 2011

Maven récupération du code source et de la javadoc

Pour récupérer les codes sources et la javadoc, il suffit d'ajouter au lancement de maven

-DdownloadSources=true -DdownloadJavadocs=true

ou bien ceci dans le pom.xml

<properties>

<downloadSources>true</downloadSources>

<downloadJavadocs>true</downloadJavadocs>

....

</properties>

Il est utile d'avoir les sources lors des phases de debugging pour comprendre parfois le comportement d'un framework.

mercredi 16 février 2011

Problème avec le Maven archetype plugin

Lors d'un test de l'archetype plugin de maven, j'obtenais un build failure avec un Required goal not found alors que tout fonctionnait auparavant...

Voici le contenu du .m2\repository\org\apache\maven\plugins\maven-archetype-plugin\maven-metadata-central.xml

<?xml version="1.0"?><metadata>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<versioning>
<latest>1.0-alpha-4</latest>
<release>1.0-alpha-4</release>
<versions>
<version>1.0-alpha-3</version>
<version>1.0-alpha-4</version>
</versions>
<lastUpdated>20060507072802</lastUpdated>
</versioning>
</metadata>

En fait, il faut le corriger comme ceci pour que tout fonctionne correctement (en téléchargeant directement sur un repository en ligne le fichier maven-metadata.xml)

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<versioning>
<latest>2.0</latest>
<release>2.0</release>
<versions>
<version>1.0-alpha-3</version>
<version>1.0-alpha-4</version>
<version>1.0-alpha-7</version>
<version>2.0-alpha-1</version>
<version>2.0-alpha-2</version>
<version>2.0-alpha-3</version>
<version>2.0-alpha-4</version>
<version>2.0-alpha-5</version>
<version>2.0</version>
</versions>
<lastUpdated>20101028011818</lastUpdated>
</versioning>
</metadata>

Et voilà!

Archetype maven et quickstart pour spring batch

Les archetypes maven ne semblent pas très fonctionnels... Pour créer un template de projet à partir d'un archetype existant voici la commande à exécuter :

$ mvn archetype:generate
Maven sort alors une liste d'une vingtaines d'archetypes possibles. On peut alors choisir l'archetype à utiliser et le customiser. Maven génère alors un répertoire projet prêt à l'emploi. En les testant on s'aperçoit que sur la majorité des archetypes disponibles, seuls quelques uns fonctionnent vraiment...
La liste des archetypes possibles se trouve ici : http://docs.codehaus.org/display/MAVENUSER/Archetypes+List
C'est un peu décevant...

De même, j'ai cherché un archetype pour Spring-batch. Visiblement rien n'existe et l'infrastructure maven ne semble pas être utilisée pour ça. Le mieux que j'ai trouvé c'est d'aller directement récupérer les exemples de code qui existent sur le repository SVN de spring !

$ svn export  https://src.springframework.org/svn/spring-batch/trunk/archetypes/simple-cli
$ cd simple-cli
$ mvn test

Et voilà! On y trouvera aussi d'autres exemples de projet.



mercredi 13 octobre 2010

Maven : configuration proxy HTTPS

La configuration d'un proxy sous maven est a priori simple : il suffit d'ajouter la section suivante dans le fichier ~/.m2/settings.xml :

<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host>proxy.somewhere.com</host>
<port>8080</port>
<username>proxyuser</username>
<password>somepassword</password>
<nonProxyHosts>localhost|10.*</nonProxyHosts>
</proxy>
</proxies>

Mais pour le protocole HTTPS la documentation n'indique rien! Si l'on essaye de transposer et d'ajouter un proxy avec
<protocol>https</protocol>
cela ne marche pas beaucoup plus...
La solution consiste à ajouter ceci à la variable d'environnement MAVEN_OPTS :

MAVEN_OPTS=$MAVEN_OPTS -Dhttps.proxyHost=proxy.somewhere.com -Dhttps.proxyPort=8080

lundi 3 mai 2010

Maven comment créer un jar des sources

Il peut arriver que l'on ait besoin de naviguer dans les sources d'un jar fait maison à travers Eclipse. Ce jar fait souvent d'un projet externe au projet courant, mais vous souhaitez pouvoir naviguer ou débugger dans ce code.

Il suffit d'ajouter ceci à votre pom.xml
<project>  ...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>

Ensuite la commande suivante fera l'affaire
$ mvn source:jar-no-fork

La solution se trouve en fait ici avec plus de détails  : http://maven.apache.org/plugins/maven-source-plugin/usage.html

Maven optimiser le déploiement avec un WAR éclaté

Optimiser le temps de déploiement devient parfois crucial pour éviter de perdre des heures... Après avoir tenté des plugins maven (comme cargo par exemple) sans être totalement convaincu par leur efficacité (quand ça marche!), il m'a semblé plus efficace de recourir au script shell.

Maven est idéal pour toutes ces tâches mais nécessite parfois un peu de tuning, notamment lorsqu'on lui demande le packaging de l'application avec le plugin maven-war-plugin. L'opération est laborieuse et nécessite ensuite le déploiement d'un WAR ce qui veut dire que (de façon raccourcie car maven fait plus de choses en réalité) :

  • maven compile l'application
  • Maven copie les classes compilées et les fichiers de ressource dans une structure éclaté (dans le répertoire target)
  • Maven zippe le tout dans un WAR (et c'est long!)
  • ensuite il faut uploader le WAR vers le serveur cible
  • Tomcat ou votre serveur d'application java doit ensuite dézipper l'archive...
Au final vous avez plusieurs opérations couteuses en temps et en ressource. Tout doit être fait manuellement.

Comment accélérer le processus ?

Julien DUBOIS propose sur le blog de Responcia une solution intéressante pour optimiser vos développements avec Jetty. Il apporte la preuve en vidéo que l'on peut améliorer les productivité des développements Java de cette façon. Mais parfois, il n'est pas possible d'opter pour Jetty...

Lire la suite...