Отправка HTTP-запроса (с вводом type = "file") из Maven с использованием параметров командной строки, если это возможно - PullRequest
0 голосов
/ 23 сентября 2010

Я хотел бы преобразовать этот bash-скрипт:

#!/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

во что-то, что можно поместить в файл maven pom.xml.

Обратите внимание, что файл-модуль является файлом jar(переименованный в .omod), в идеале в командной строке должен быть указан пароль администратора, аналогично параметрам командной строки для архетипа maven: create http://maven.apache.org/guides/mini/guide-creating-archetypes.html#Alternative_way_to_start_creating_your_Archetype

(имя хоста в идеале также следует указывать в командной строке).

Спасибо

Ваш Миша

Ответы [ 2 ]

5 голосов
/ 23 сентября 2010

Используйте GMaven до для встраивания встроенного скрипта Groovy и используйте apache httpclient для реализации почтового запроса. Примерно так:

<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>

При этом используются свойства maven http.url и http.attachmentFile, которые можно указать в командной строке с помощью синтаксиса -D или в файле pom.xml в блоке <properties>. Очевидно, вам нужно расширить функциональность до того, что еще делает ваш сценарий оболочки, но это должно помочь вам начать работу.

2 голосов
/ 23 сентября 2010

Попробуйте Exec Maven Plugin . Возможно, вы захотите просто сохранить cookie в ${project.build.directory} вместо /tmp (и тогда вам не нужно его удалять.

Вы можете использовать любое имя свойства для хоста, которое вам нравится, например, host.name. Вы должны установить значение по умолчанию в POM:

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

Это можно переопределить с помощью -Dhost.name=... в командной строке.

...