Tomcat部署失败

chr*_*her 6 tomcat maven jenkins

我遇到的问题

我对我的应用程序进行了轻微更改,并将其检入到subversion存储库中.一旦签入,我运行了Jenkins构建.Jenkins目前正在Windows服务器上运行.

我收到的错误如下:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal       
org.codehaus.mojo:tomcat-maven-plugin:1.1:deploy (deploy) on project sd-rest-servlet: 
Cannot invoke Tomcat manager: FAIL - Deployed application at context path /sd but 
context failed to start
Run Code Online (Sandbox Code Playgroud)

我进一步调查了这个错误消息,所以我检查了Jenkins服务器上的Tomcat日志,我发现了一个潜在的问题:

SEVERE: Error starting static Resources
java.lang.IllegalArgumentException: Document base C:\Program Files\Apache Software Foundation\Tomcat 6.0\temp\28-sd does not exist or is not a readable directory
at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142)
at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4320)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4489)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1385)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:306)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1389)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1653)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1662)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1642)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

现在,据我所知,该temp文件夹永远只能以这种方式使用当我设置antiJarLockingantiResourceLockingtruecontext文件.但是,正如您所看到的,我没有将其包含在Context元素中:

<Context unpackWAR="false">
Run Code Online (Sandbox Code Playgroud)

其他行为

无法取消部署

经过仔细检查后,我发现Jenkins无法取消部署该应用程序.在日志中,我看到了这条消息.

[INFO] Undeploying application at http://localhost:8082/sd
[INFO] OK - Undeployed application at context path /sd
Run Code Online (Sandbox Code Playgroud)

但是,在尝试部署时,构建失败,并出现以下错误:

Cannot invoke Tomcat manager: FAIL - Application already exists at path /sd
Run Code Online (Sandbox Code Playgroud)

对Temp目录的访问不稳定

我还注意到,IllegalArgumentException只要它尝试访问temp目录中的任何文件,它就会抛出相同的内容.这告诉我temp目录有问题,但是我已经设置了权限,而在应用程序的早期,Jenkins实际上将一个文件放在temp目录中.

没有问题Depoying

Jenkins实际上部署应用程序没有问题.我已经看到文件添加到目录时目录发生了变化,包括temp目录.这告诉我Jenkins随机决定它无法读取目录的内容,尽管事实上它已经添加了一个文件.它似乎有写权限,但没有读权限,这真的没有多大意义!

试图解决问题

确保文件存在

我首先尝试向内C:\Program Files\Apache Software Foundation\Tomcat 6.0\temp\28-sd看,看看文件是否存在.果然,它存在.

改变权限

作为预防措施,我已设置权限以允许服务器上的每个用户进行完全访问.

研究了Temp目录的使用

我试图配置我的上下文文件以避免使用该temp目录,所以我不知道它为什么还在尝试从中读取它.我对这项技术的来龙去脉不熟悉,所以我可能仍然有一些需要该temp文件夹的设置.

编辑

扩展Tomcat日志

18-Dec-2013 12:14:19 org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/sd]
18-Dec-2013 12:16:06 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor sd.xml
18-Dec-2013 12:16:09 org.apache.catalina.core.StandardContext resourcesStart

<!-- Above stacktrace goes here -->

18-Dec-2013 12:16:09 org.apache.catalina.core.StandardContext start
SEVERE: Error in resourceStart()
18-Dec-2013 12:16:09 org.apache.catalina.core.StandardContext start
SEVERE: Error getConfigured
18-Dec-2013 12:16:09 org.apache.catalina.core.StandardContext start
SEVERE: Context [/sd] startup failed due to previous errors
18-Dec-2013 12:16:09 org.apache.catalina.core.StandardContext stop
INFO: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/sd] has  not been started
Run Code Online (Sandbox Code Playgroud)

关于这个问题的更多信息

在阅读了千分之一的日志后,我重读了这一行:

...Tomcat 6.0\temp\28-sd does not exist or is *not a readable directory*

所以当我temp再次查看目录时,我意识到生成的文件不是directories.它们是这些奇怪的文件对象,没有扩展名,它们看起来像这样:

在此输入图像描述

对我来说,这表明Tomcat操纵文件的方式出了问题,这就是问题的核心.我希望这些额外的信息可以帮助有人找到答案!

vij*_*cat 6

我看到Hoaz建议C:\Program Files\由于空间特征而将部署移出.我想知道它是否比名称中的空格更具权限问题?

你能不能试试这些(不卸载Tomcat C:\Program Files\):

  1. 将临时目录的位置配置为外部 C:\Program Files\

    参考:SO问题如何定义Tomcat临时目录位置?

  2. 更改docBase和/或的位置appBase

    参考:Apache文档http://tomcat.apache.org/tomcat-6.0-doc/config/host.html

此外,强制安装在"C:\ Program Files"之外可以正常工作,除非/直到有人坚持"那就是程序文件应该存在的地方,你知道".:-)