gpt4 book ai didi

使用 DeployTask 类远程部署 war 文件的 Java 代码

转载 作者:行者123 更新时间:2023-11-30 10:27:56 25 4
gpt4 key购买 nike

我编写了下面的代码,使用 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 代码可以在不使用 maven 的情况下使用下面的 url 远程部署 war 文件:

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

最佳答案

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

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

更新

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

关于使用 DeployTask 类远程部署 war 文件的 Java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45000918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com