2 votes

Code Java pour déployer à distance un fichier war en utilisant la classe DeployTask

J'ai écrit le code ci-dessous pour déployer à distance un fichier war sur le serveur tomcat en utilisant la classe DeployTask déjà implémentée par Tomcat.

import java.io.File;
import org.apache.catalina.ant.DeployTask;

public class TestClass {
    public static void main(String[] args) {
        String filePath = "resources/StudentWS.war";
        TestClass test=new TestClass();
        ClassLoader classLoader = test.getClass().getClassLoader();
        File warFile = new       
        File(classLoader.getResource(filePath).getFile());

        String webPath="StudentWS";
        String url = "http://localhost:8080/manager/text";

        DeployTask deployTask=new DeployTask();
        deployTask.setUrl(url);
        deployTask.setUsername("deployer");
        deployTask.setPassword("admin");       
        deployTask.setWar(warFile.getAbsolutePath());
        deployTask.setPath(webPath);
        deployTask.execute();
    }
}

Et voici la configuration de l'utilisateur deployer sur tomcat:

 < role rolename="manager-script"/>

 < role rolename="manager-jmx"/>

 < user username="deployer" password="admin" roles="manager-script,manager-jmx"/>

Mais j'ai reçu l'erreur suivante:

Exception in thread "main" java.io.IOException: Error writing request body to server
at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:270)
at org.apache.catalina.ant.DeployTask.execute(DeployTask.java:178)
at TestClass.main(TestClass.java:20)
Caused by: java.io.IOException: Error writing request body to server
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.checkError(HttpURLConnection.java:3518)
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.write(HttpURLConnection.java:3501)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:219)
... 2 more
Suppressed: java.io.IOException: insufficient data written
    at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.close(HttpURLConnection.java:3540)
    at java.io.FilterOutputStream.close(FilterOutputStream.java:159)
    at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:222)
    ... 2 more

J'aimerais savoir ce que j'ai manqué ou s'il existe un code java pour déployer à distance un fichier war en utilisant l'url ci-dessous sans utiliser maven:

http://localhost:8080/manager/text/deploy?path=/StudentWS&war=file:Path_To_War_File

1voto

Andrew Finnell Points 9013

Je viens d'avoir le même problème. Le problème semble être que nous devions utiliser la propriété 'localwar'. J'ai examiné le code source, et il traite la propriété war différemment et ne peut pas déployer un fichier local en utilisant cette propriété. Modifiez votre code pour être :

DeployTask deployTask=new DeployTask();
deployTask.setUrl(url);
deployTask.setUsername("deployer");
deployTask.setPassword("admin");       
deployTask.setLocalWar(warFile.getAbsolutePath());
deployTask.setPath(webPath);
deployTask.execute();

Mise à jour

Je viens de réaliser que cela fonctionne uniquement si le serveur sur lequel vous déployez est local. Si c'est un serveur distant, je ne pense pas que cela fonctionnera. Il doit y avoir quelque chose qui ne va pas avec la tâche Deploy elle-même causant son échec.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X