【问题标题】:Java code to remotely deploy a war file by using DeployTask class使用 DeployTask 类远程部署 war 文件的 Java 代码
【发布时间】:2017-07-09 20:53:14
【问题描述】:

我编写了下面的代码,使用Tomcat已经实现的类DeployTask在tomcat服务器上远程部署war文件。

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();
    }
}

这是tomcat上用户部署器的配置:

 < role rolename="manager-script"/>

 < role rolename="manager-jmx"/>

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

但我收到以下错误:

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

我想知道我错过了什么,或者是否有 java 代码可以使用下面的 url 远程部署 war 文件而不使用 maven:

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

【问题讨论】:

    标签: java tomcat deployment war


    【解决方案1】:

    我也遇到了同样的问题。问题似乎是我们需要使用“localwar”属性。我查看了源代码,它对战争属性的处理方式不同,无法使用该属性部署本地文件。 将您的代码更改为:

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

    更新

    我刚刚意识到这仅在您部署到本地的服务器时才有效。如果它是远程服务器,我不相信它会起作用。一定是 Deploy 任务本身出了问题,导致它失败。

    【讨论】:

      猜你喜欢
      • 2015-09-16
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 2011-07-17
      • 2012-04-02
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多