2010-09-23 20 views
0

Je voudrais convertir ce script bash:Faire la demande de poste HTTP (avec un input type = « file ») à partir de Maven, en utilisant des paramètres de ligne de commande si possible

#!/bin/bash 
if ! [ $# == 2 ]; then 
    echo Usage: update-module admin-password module-file 
    exit 1 
fi 
if ! [ -f $2 ]; then 
    echo Error: module file $2 does not exist 
    exit 1 
fi 
curl -c /tmp/cookie.txt -d uname=admin -d pw=${1} http://localhost:8080/openmrs/loginServlet 
curl -b /tmp/cookie.txt -F action=upload -F update=true -F moduleFile=\@$2 http://localhost:8080/openmrs/admin/modules/module.list 
rm -rf /tmp/cookie.txt > /dev/null 2>&1 

dans quelque chose qui pourrait être placé dans un fichier maven pom.xml.

Notez que le module fichier est un fichier jar (de .omod renommé), admin mot de passe serait idéalement spécifié sur la ligne de commande, similaire à la commande des paramètres de ligne Maven archétype: créer http://maven.apache.org/guides/mini/guide-creating-archetypes.html#Alternative_way_to_start_creating_your_Archetype

(le nom d'hôte devrait idéalement être spécifié sur la ligne de commande aussi).

Merci

vôtre Misha

Répondre

5

utilisez GMaven-embed an inline Groovy Script et utiliser apache httpclient pour mettre en œuvre la demande de poste Quelque chose comme ceci:.

<plugin> 
    <groupId>org.codehaus.groovy.maven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpclient</artifactId> 
      <version>4.0.2</version> 
     </dependency> 
    </dependencies> 
    <executions> 
     <execution> 
      <phase>generate-resources</phase> 
      <goals> 
       <goal>execute</goal> 
      </goals> 
      <configuration> 
       <source><![CDATA[ 

        import org.apache.http.HttpResponse; 
        import org.apache.http.client.HttpClient; 
        import org.apache.http.client.methods.HttpPost; 
        import org.apache.http.entity.InputStreamEntity; 
        import org.apache.http.impl.client.DefaultHttpClient; 

        String url = pom.properties['http.url']; 
        File file = new File(pom.properties['http.attachmentFile']) 
        HttpClient client = new DefaultHttpClient(); 
        HttpPost post = new HttpPost(url); 
        InputStreamEntity entity = new InputStreamEntity(file.newInputStream()); 
        post.setEntity entity; 
        HttpResponse response = client.execute(post); 

       ]]></source> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Il utilise les propriétés de Maven http.url et http.attachmentFile que vous pouvez spécifier sur la ligne de commande en utilisant la syntaxe -D ou dans un fichier pom.xml dans un bloc <properties>. Évidemment, vous devriez étendre la fonctionnalité à ce que fait votre script shell, mais cela devrait vous aider à démarrer.

+1

Je le savais! Je savais que tu viendrais avec une solution Groovy :) –

+1

Hammer ... Nails ... :-) http://en.wikipedia.org/wiki/Law_of_the_instrument –

2

Essayez le Exec Maven Plugin. Vous pouvez stocker tout le cookie dans ${project.build.directory} au lieu de /tmp (et vous n'avez pas besoin de l'enlever.

Vous pouvez utiliser un nom de propriété pour l'hôte que vous voulez, dites host.name. Vous devez définir une valeur par défaut dans POM:.

<properties> 
    <host.name>...</host.name> 
</properties> 

qui peut être outrepassée avec -Dhost.name=... sur la ligne de commande