java - ANT 到远程 Tomcat 部署获得 500

标签 java tomcat ant

所以我做了一个 ANT 目标来将我们的应用程序部署到远程开发服务器上的 Tomcat。 ANT 部署到 tomcat 目标在本地 Tomcat 实例上 100% 完美。当我部署到远程服务器时,我收到一个 500 错误,但应用程序实际上部署到服务器,我们可以查看和使用它,就好像没有错误一样。

非常酷,它可以工作,但 500 错误导致 ANT 目标说构建失败。如果 ANT 说构建失败,我们的构建服务器 Hudson 也会失败,这意味着我们将看到悲伤的红点,而不是快乐的绿点。

我们在 Tomcat v9 中使用最新最好的 ANT。

下面是我在执行“ant deploy-dev”目标时遇到的错误。


[username@localhost app.directory]$ ant deploy-dev Buildfile: /home/username/git/app.directory/build.xml Trying to override old definition of datatype resources

<p>deploy-dev: [echo] Deploying app to: <a href="https://dev.myapp.com" rel="noreferrer noopener nofollow">https://dev.myapp.com</a></p> <p>BUILD FAILED /home/username/git/app.directory/build.xml:73: The following error occurred while executing this line: /home/username/git/app.directory/build.xml:146: java.io.IOException: Server returned HTTP response code: 500 for URL: <a href="https://dev.myapp.com/manager/text/deploy?path=%2Fmy-app%2F" rel="noreferrer noopener nofollow">https://dev.myapp.com/manager/text/deploy?path=%2Fmy-app%2F</a> at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1840) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:254) at org.apache.catalina.ant.DeployTask.execute(DeployTask.java:194) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 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:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 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:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:396) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 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:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.Target.execute(Target.java:435) at org.apache.tools.ant.Target.performTasks(Target.java:456) at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405) at org.apache.tools.ant.Project.executeTarget(Project.java:1376) at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) at org.apache.tools.ant.Project.executeTargets(Project.java:1260) at org.apache.tools.ant.Main.runBuild(Main.java:854) at org.apache.tools.ant.Main.startAnt(Main.java:236) at org.apache.tools.ant.launch.Launcher.run(Launcher.java:285) at org.apache.tools.ant.launch.Launcher.main(Launcher.java:112)</p>

Total time: 3 minutes 3 seconds


要了解正在运行的内容,这里是 ANT build.xml 的重要部分。

<property environment="env"/>
<property file="build.properties"/>

<!-- Import -->
<import file="${env.CATALINA_HOME}/bin/catalina-tasks.xml" optional="true"/>

<!-- The deploy to Tomcat target -->
<target name="deploy-local" description="Deploy the app to local Tomcat">
    <tomcat-deploy base-url="${url.base.local}"/>
</target>

<target name="deploy-dev" description="Deploy the app to dev Tomcat">
    <tomcat-deploy base-url="${url.base.dev}"/>
</target>

<target name="undeploy-local" depends="stop-local" description="Undeploy the app from local Tomcat">
    <tomcat-undeploy base-url="${url.base.local}"/>
</target>

<target name="undeploy-dev" depends="stop-dev" description="Undeploy the app from dev Tomcat">
    <tomcat-undeploy base-url="${url.base.dev}"/>
</target>

<target name="stop-local" description="Stop the app on local Tomcat">
    <tomcat-stop base-url="${url.base.local}"/>
</target>

<target name="stop-dev" description="Stop the app on dev Tomcat">
    <tomcat-stop base-url="${url.base.dev}"/>
</target>

<macrodef name="tomcat-deploy">
   <attribute name="base-url"/>
   <sequential>
        <echo>Deploying app to: @{base-url}</echo>
        <deploy url="@{base-url}/manager/text" username="${username}" password="${password}" 
                path="/${app.name}" war="file:${war.path}.war"/>
   </sequential>
</macrodef>

<macrodef name="tomcat-undeploy">
   <attribute name="base-url"/>
   <sequential>
        <echo>Un-deploying app from: @{base-url}</echo>
        <undeploy 
                failonerror="no"
                url="@{base-url}/manager/text"
                username="${username}"
                password="${password}"
                path="/${app.name}"
            />
   </sequential>
</macrodef>

<macrodef name="tomcat-stop">
   <attribute name="base-url"/>
   <sequential>
        <echo>Stopping the app at: @{base-url}</echo>
        <stop url="@{base-url}/manager/text" username="${username}"
                password="${password}" path="/${app.name}" />
   </sequential>
</macrodef>

任何人都知道为什么部署到远程工作但仍然返回错误?我得到的错误有点模糊,所以我不知道我能做些什么来调试它。

最佳答案

问题是服务器部署应用程序的时间太长。 Tomcat Deploy 目标正在某处等待服务器的响应,表明应用程序已部署。不幸的是,唯一的错误是 500,除此之外别无他法。

解决方案,我只是重新安装了版本 9 的 Tomcat,从版本 8 开始,一切都启动得更快并且构建成功。

我真的不能说这是最好的答案,但我让一切正常。希望有一天有人有更好的解决方案。

关于java - ANT 到远程 Tomcat 部署获得 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41172283/

相关文章:

java - 如何在动态生成的表中获取 TextView 的文本?

java - HTML 页面未连接到数据库

java - 可视化 Java 类型层次结构中的类,它们实现了不同的功能?

java - Icefaces 和 Tomcat 崩溃

java - Gradle:创建具有依赖项的单个JAR

maven-2 - 如何在 Ant 中从 Mavens 的 pom 中获取项目版本

java - Intellij 生成 Ant 构建文件,但不构建 jar

java 信任 unix 证书存储

java - RequestDispatcher 在 Tomcat 实例之间转发

jsp - 如何从另一台计算机访问Tomcat?