2009-12-18 33 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