2009-12-18 69 views
0

试图在干净的后面执行mvn tomcat:run,并在pom中指定配置的tomcatWebXml时,我得到一个FileNotFoundException。Maven-Tomcat-Plugin在干净后使用FileNotFound配置的web.xml错误

下面是从我POM片断:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>tomcat-maven-plugin</artifactId> 
    <version>1.0-beta-1</version> 
    <configuration>     
     <path>/licensing</path> 
     <tomcatWebXml>${basedir}/src/main/mock/web.xml</tomcatWebXml> 
    </configuration> 
</plugin> 

而这里的我有错误发生,但仅限于第一次调用干净后,后续调用查找文件和做工精细。

[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Could not create Tomcat configuration 

Embedded error: C:\..snip..\src\main\mock\web.xml 
[INFO] ------------------------------------------------------------------------ 
[INFO] Trace 
org.apache.maven.lifecycle.LifecycleExecutionException: Could not create Tomcat 
configuration 
     at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(Defa 
ultLifecycleExecutor.java:703) 
     at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandalone 
Goal(DefaultLifecycleExecutor.java:553) 
     at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(Defau 
ltLifecycleExecutor.java:523) 
     at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHan 
dleFailures(DefaultLifecycleExecutor.java:371) 
     at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegmen 
ts(DefaultLifecycleExecutor.java:332) 
     at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLi 
fecycleExecutor.java:181) 
     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:356) 
     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:137) 
     at org.apache.maven.cli.MavenCli.main(MavenCli.java:362) 
     at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:4 
1) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. 
java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315) 
     at org.codehaus.classworlds.Launcher.launch(Launcher.java:255) 
     at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430) 

     at org.codehaus.classworlds.Launcher.main(Launcher.java:375) 
Caused by: org.apache.maven.plugin.MojoExecutionException: Could not create Tomc 
at configuration 
     at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java 
:153) 
     at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPlugi 
nManager.java:483) 
     at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(Defa 
ultLifecycleExecutor.java:678) 
     ... 17 more 
**Caused by: java.io.FileNotFoundException: C:\...snip..\src\main\mock\web.xml** 
     at org.codehaus.mojo.tomcat.AbstractRunMojo.copyFile(AbstractRunMojo.jav 
a:326) 
     at org.codehaus.mojo.tomcat.AbstractRunMojo.initConfiguration(AbstractRu 
nMojo.java:273) 
     at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java 
:143) 
     ... 19 more 

关于如何解决这个问题的任何想法?如果这是一个无条件的错误,那么似乎会影响每个人的任何事情。

回答

1

我可以重现这个错误。不知道为什么,但在AbstractRunMojo.java下面的方法:

private void copyFile(String fromPath, File toFile) 
    throws IOException 
{ 

    URL fromURL = getClass().getResource(fromPath); 

    if (fromURL == null) 
    { 
     throw new FileNotFoundException(fromPath); 
    } 

    FileUtils.copyURLToFile(fromURL, toFile); 
} 

getClass().getResource(fromPath)呼叫的确之后干净返回null URL,并在后续调用工作。我没有真正挖掘这个问题,但这似乎是一个班加载问题(可能与MTOMCAT-25有关)。

这是非常恼人的,但解决方法显然是一次失败后运行目标第二次。

编辑:我已经报告过这个问题,见MTOMCAT-42,它已经修复,Maven Tomcat插件的新快照已经发布!要使用它,下面的代码片段添加到您的pom.xml

<pluginRepositories> 
    <pluginRepository> 
     <id>Codehaus Snapshots</id> 
     <url>http://snapshots.repository.codehaus.org/</url> 
     <snapshots> 
     <enabled>true</enabled> 
     </snapshots> 
     <releases> 
     <enabled>true</enabled> <!-- Workaround for MNG-2974, see note below --> 
     </releases> 
    </pluginRepository> 
    </pluginRepositories> 

然后插件的版本改变为1.0-SNAPSHOT,然后再试一次。

+0

感谢您的再现,帕斯卡。 – 2009-12-19 06:19:49

+0

谢谢帕斯卡,真是太棒了! – 2010-01-06 13:49:20

+0

其实,在遵循你的指示后,我仍然无法拉下快照。开了这个问题:http://stackoverflow.com/questions/2013576/maven-is-failing-to-download-the-tomcat-maven-plugin-snapshot – 2010-01-06 14:36:41