Tomcat部署失败

时间:2013-12-16 11:58:56

标签: maven tomcat 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

我进一步调查了这个错误消息,所以我检查了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)

现在,根据我的理解,temp文件夹只有在我antiJarLockingantiResourceLocking true context Context时才会以这种方式使用文件。但是,正如您所看到的,我没有将其包含在<Context unpackWAR="false"> 元素中:

[INFO] Undeploying application at http://localhost:8082/sd
[INFO] OK - Undeployed application at context path /sd

其他行为

无法取消部署

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

Cannot invoke Tomcat manager: FAIL - Application already exists at path /sd

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

IllegalArgumentException

对Temp目录的访问不正常

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

没有出现问题

Jenkins实际上部署应用程序没有问题。我已经看到文件添加到目录时会更改目录,包括C:\Program Files\Apache Software Foundation\Tomcat 6.0\temp\28-sd目录。这告诉我Jenkins随机决定它无法读取目录的内容,尽管事实上它已经添加了一个文件。它似乎具有写权限,但不具有读权限,这实际上没有多大意义!

尝试解决问题

确保文件存在

我首先尝试查看temp内部以查看该文件是否存在。果然,它存在。

修改权限

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

研究了Temp目录的使用

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

编辑

扩展Tomcat日志

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

有关此问题的更多信息

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

temp

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

enter image description here

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

1 个答案:

答案 0 :(得分:6)

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

您还可以尝试这些(不从C:\Program Files\卸载Tomcat):

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

    之外

    参考:问题How is the Tomcat temp directory location defined?

  2. 更改docBase和/或appBase

    的位置

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

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