Maven-Tomcat-Plugin использует настроенные ошибки web.xml с FileNotFound после очистки - PullRequest
0 голосов
/ 18 декабря 2009

При попытке выполнить mvn tomcat:run сразу после очистки и с настроенным tomcatWebXml, указанным в поме, я получаю исключение FileNotFoundException.

Вот фрагмент из моего 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 Ответ

1 голос
/ 19 декабря 2009

Я мог бы воспроизвести эту ошибку. Не уверен, почему, но в следующем методе 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 ) действительно возвращает URL null сразу после очистки и работает во время последующих вызовов. Я действительно не копал проблему, но это, кажется, проблема загрузки классов (возможно, связанная с 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 и попробуйте снова.

...