Версия Tomcat: 8.0.43
ОС: Виндовс 10
URL-адрес моего развертывания: http://localhost:8080/manager/text
Мои учетные записи пользователей, похоже, настроены правильно, так как я могу без проблем получить доступ к веб-интерфейсу.
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="user" password="pass" roles="manager-gui,manager-script"/>
</tomcat-users>
Когда я пытаюсь вручную получить доступ к этому URL-адресу развертывания в браузере, у меня нет проблем, и я вижу это в своих журналах.
user [08/Oct/2018:12:51:15 -0700] "GET /manager/text/deploy?path=/apc HTTP/1.1" 200 69
Когда я пытаюсь выполнить развертывание через Ant, я получаю следующую ошибку и запись в журнале с неавторизованным HTTP-кодом 401.
<target name="deploy" description="Install web application" depends="dist">
<deploy url="http://localhost:8080/manager/text" username="user" password="pass"
path="/apc" war="dist/apc.war"/>
</target>
java.io.IOException: Error writing request body to server
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.checkError(HttpURLConnection.java:3536)
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.write(HttpURLConnection.java:3519)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:238)
at org.apache.catalina.ant.DeployTask.execute(DeployTask.java:194)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
at org.apache.tools.ant.Task.perform(Task.java:350)
at org.apache.tools.ant.Target.execute(Target.java:449)
at org.apache.tools.ant.Target.performTasks(Target.java:470)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1388)
at org.apache.tools.ant.Project.executeTarget(Project.java:1361)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.apache.tools.ant.Main.runBuild(Main.java:834)
at org.apache.tools.ant.Main.startAnt(Main.java:223)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:284)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:101)
Suppressed: java.io.IOException: insufficient data written
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.close(HttpURLConnection.java:3558)
at java.io.FilterOutputStream.close(FilterOutputStream.java:159)
at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:241)
... 17 more
- [08/Oct/2018:12:52:14 -0700] "PUT /manager/text/deploy?path=%2Fapc HTTP/1.1" 401 2473
Странно то, что моя команда Undeploy Ant прекрасно работает с тем же именем пользователя и паролем. Итак, если я вручную разверну свой WAR, я могу успешно отменить развертывание с помощью этой команды.
<target name="undeploy" description="Remove web application">
<undeploy url="http://localhost:8080/manager/text" username="user" password="pass"
path="/apc"/>
</target>
user [08/Oct/2018:12:47:34 -0700] "GET /manager/text/undeploy?path=%2Fapc HTTP/1.1" 200 61
Итак, кажется, что мое имя пользователя и пароль верны, но по какой-то причине развертывание не распознает их как действительные.
Следует отметить, что записи журнала для моих успешных попыток ручного доступа и отмены развертывания показывают user
перед записью. Вместо неудачной записи журнала для развертывания отображается -
. Не знаю, что это значит, но может быть важно.
ОБНОВЛЕНИЕ: похоже, что это может быть как-то связано с файлами библиотеки tomcat 8. В настоящее время я использую JAR-файлы catalina-ant, tomcat-coyote, tomcat-util в своем пути к классам для запуска своего сценария ant. Если я использую библиотеку, предоставленную в Tomcat 8, у меня есть эти ошибки выше. Если вместо этого я использую библиотеки из старой установки Tomcat 7, то все работает нормально.
"deploy"
, он использует пользователя-
, а когда вы используете undeploy, он использует правильного пользователя, то естьuser
, вы можете подтвердить это, используя следующую команду в своем муравье<echo>User is: ${username}</echo>
- person rohit thomas   schedule 22.10.2018depends="dist"
, поэтому вам, возможно, придется также проверить зависимость - person rohit thomas   schedule 22.10.2018