2009-12-18 4 views
0

Lorsque vous tentez d'exécuter mvn tomcat:run juste après un nettoyage, et avec un tomcatWebXml configuré dans le pom, j'obtiens une exception FileNotFoundException.Maven-Tomcat-Plugin en utilisant des erreurs web.xml configurées avec FileNotFound après un nettoyage

est ici l'extrait de mon 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> 

Et voici l'erreur que je ressens, mais seulement sur la première invocation après une propre, les invocations ultérieures de trouver le fichier et le travail bien.

[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 

Des idées sur comment je pourrais résoudre ceci? Si c'est un bogue inconditionnel, il semblerait que ce soit le genre de chose qui affecterait n'importe qui &.

Répondre

1

Je pourrais reproduire ce bug. Je ne sais pas pourquoi, mais dans la méthode suivante de 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); 
} 

L'appel à getClass().getResource(fromPath) retourne en effet une URL null juste après un nettoyage et fonctionne pendant les invocations ultérieures. Je n'ai pas vraiment creusé le problème, mais cela semble être un problème de chargement en classe (peut-être lié à MTOMCAT-25).

C'est assez ennuyeux mais la solution de contournement est évidemment de faire tourner le but une deuxième fois après le premier échec.

EDIT: Je ai signalé ce problème, voir MTOMCAT-42, qui a été fixé et un nouvel instantané du plugin Maven Tomcat a été publié! Pour l'utiliser, ajoutez l'extrait suivant à votre 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> 

ensuite changer la version du plug-in pour 1.0-SNAPSHOT et essayer à nouveau.

+0

Merci d'avoir reproduit cela, Pascal. –

+0

Merci Pascal, c'est génial! –

+0

En fait, après avoir suivi vos instructions, je ne parviens toujours pas à tirer vers le bas l'instantané. Ouvert cette question: http://stackoverflow.com/questions/2013576/maven-is-failing-to-download-the-tomcat-maven-plugin-snapshot –

Questions connexes