Maven Tomcat部署失败 我遇到的问题
我对我的应用程序实现了一个轻微的更改,并将其签入subversion存储库。签入后,我运行了Jenkins构建。Jenkins目前正在Windows服务器上运行 我收到的错误如下:Maven Tomcat部署失败 我遇到的问题,maven,tomcat,jenkins,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-r
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
文件夹只有在我将上下文
文件中的防jarlocking
或防资源锁定
设置为true
时才会以这种方式使用。但是,正如您所看到的,我没有将其包含在上下文中元素中:
<Context unpackWAR="false">
但是,生成在尝试部署时失败,并出现以下错误:
Cannot invoke Tomcat manager: FAIL - Application already exists at path /sd
对临时目录的访问不稳定
我还注意到,每当它试图访问temp
目录中的任何文件时,它都会抛出相同的IllegalArgumentException
。这告诉我temp
目录有问题,但是我已经设置了权限,在应用程序的前面,Jenkins实际上在temp
目录中放置了一个文件
存储无问题
Jenkins实际上毫无问题地部署了应用程序。我注意到当文件被添加到目录中时,目录发生了变化,包括temp
目录。这告诉我Jenkins随机决定它不能读取目录的内容,尽管它被添加了一个文件。它似乎有写权限,但没有读权限,这真的没有多大意义
尝试解决问题
确保文件存在
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
我首先尝试查看C:\ProgramFiles\Apache软件基金会\Tomcat 6.0\temp\28 sd
中的文件是否存在。果不其然,它确实存在
更改的权限
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
作为预防措施,我已经设置了允许服务器上每个用户完全访问的权限
研究了临时目录的使用
我试图配置我的上下文文件以避免使用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
18-Dec-2013 12:14:19 org.apache.catalina.startup.HostConfig checkResources
信息:取消部署上下文[/sd]
2013年12月18日12:16:06 org.apache.catalina.startup.HostConfig部署描述符
信息:部署配置描述符sd.xml
2013年12月18日12:16:09 org.apache.catalina.core.StandardContext资源启动
2013年12月18日12:16:09 org.apache.catalina.core.StandardContext开始
严重:resourceStart()中出现错误
2013年12月18日12:16:09 org.apache.catalina.core.StandardContext开始
严重:配置错误
2013年12月18日12:16:09 org.apache.catalina.core.StandardContext开始
严重:由于以前的错误,上下文[/sd]启动失败
2013年12月18日12:16:09 org.apache.catalina.core.StandardContext停止
信息:Container org.apache.catalina.core.ContainerBase.[catalina].[localhost]./sd]尚未启动
有关该问题的更多信息
在第一千次阅读日志之后,我重读了这一行:
…Tomcat 6.0\temp\28 sd不存在或*不是可读目录*
因此,当我再次查看temp
目录时,我意识到生成的文件不是目录
。它们是没有扩展名的奇怪文件对象,它们看起来如下:
对我来说,这表明Tomcat处理文件的方式出了问题,这是问题的核心。我希望这些额外的信息能帮助你找到答案 我看到Hoaz建议将部署从C:\Program Files\
中移出,因为空格字符。我想知道这是不是一个权限问题,而不是名称中的空格
请您也尝试一下(无需从C:\Program Files\
卸载Tomcat):
将临时目录的位置配置为在C:\Program Files\
参考资料:那么问题是什么
更改docBase
和/或appBase
参考:Apache文档
此外,强制安装在“C:\Program Files”之外也可以,除非/直到有人坚持认为“程序文件应该在那里,你知道。”:) 这是Jenkins的问题还是通过Jenkins部署的应用程序的问题?jenkins 1.540至1.544系列中存在一些真正糟糕的windows bug我不确定问题是否完全在于jenkins,因为它正在成功构建类似的项目。我认为这是围绕我的Tomcat实例的一个问题。听起来很像这个老错误:当Tomcat安装路径中有空格时,我看到了类似的问题。尝试将其移动到C:\dev\tomcat-6.0.x\Hoaz。我想这可能就是问题所在。好地方!请将此作为答案发布。祝贺您!回答得好。结果是由空间问题引发的,随后的问题是权限问题,所以你的回答再准确不过了。万岁!谢谢你,克里斯!