Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven Tomcat部署失败 我遇到的问题_Maven_Tomcat_Jenkins - Fatal编程技术网

Maven Tomcat部署失败 我遇到的问题

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

我对我的应用程序实现了一个轻微的更改,并将其签入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
文件夹只有在我将
上下文
文件中的
防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。我想这可能就是问题所在。好地方!请将此作为答案发布。祝贺您!回答得好。结果是由空间问题引发的,随后的问题是权限问题,所以你的回答再准确不过了。万岁!谢谢你,克里斯!