簡體   English   中英

Tomcat 8無法通過Ant腳本進行部署

[英]Tomcat 8 cannot deploy via Ant script

Tomcat版本:8.0.43

作業系統:Windows 10

我的部署URL: http:// localhost:8080 / manager / text

我的用戶帳戶似乎設置正確,因為我可以正常訪問Web UI。

<?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進行部署時,出現以下錯誤並使用401未經授權的HTTP代碼登錄日志

<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 lib文件有關。 當前,我在類路徑中使用catalina-ant,tomcat-coyote,tomcat-util JAR來運行我的ant腳本。 如果我使用Tomcat 8中提供的庫,則會出現上述錯誤。 如果我改用舊的Tomcat 7安裝中的庫,則可以正常運行。

已知在2017年5月30日(8.0.45及更高版本)之后的所有版本的Tomcat 8.0中都將取消對身份驗證的支持-請參閱問題#62809

問題#62809已在Tomcat 9.0.13、8.5.35和7.0.92中修復。 在Tomcat 8.0中尚未修復此問題,因為Tomcat 8.0已經達到使用壽命。

供參考: r1796838r1843992

在java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
在org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:238)

上面的行號並非來自您聲稱的Tomcat 8.0.43,而是來自8.0.45或更高版本。 在8.0.43中,“ ostream.write(..)”調用位於AbstractCatalinaTask第242行上。 在8.0.45+中,它位於238行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM