Ошибка выполнения теста Maven - PullRequest
4 голосов
/ 21 октября 2011

Когда я использую Maven для запуска модульных тестов для моего приложения Java EE, я получаю странную ошибку: org.apache.maven.plugin.MojoExecutionException: невозможно скопировать артефакт в рабочий каталог , вызванныйa java.io.FileNotFoundException: D: \ Work \ Projets \ RT_GAF \ Dev \ Sandbox \ client \ target \ classes (доступ запрещен)

Структура приложения Maven:

  • ... \ Dev \ Sandbox \: корень приложения, это модуль 'pom', который перечисляет другие модули
  • ... \ Dev \ Sandbox \ common \: 'модуль jar ', содержит классы, общие для клиента и сервера, и тесты (только для JUnit)
  • ... \ Dev \ Sandbox \ client \: модуль' jar ', содержит классы умного клиента (Swing и т. д.) итесты (только JUnit), развернутые с помощью Java Web Start
  • ... \ Dev \ Sandbox \ server \: 'jar', содержат серверные классы (MVC, DAO и т. д.) и тесты (как JUnit, так и Arquillian))
  • ... \ Dev \ Sandbox \ webapp \: модуль 'war', содержит веб-элементы (JSP, изображения, web.x)ml и т. д.), АБСОЛЮТНО НЕТ КЛАССОВ ИЛИ ИСПЫТАНИЙ, получит jar-файлы 'common' и 'server'
  • ... \ Dev \ Sandbox \ application \: 'ear', содержит application.xml, получит 'webapp 'war

Как уже говорилось, у нас есть тесты JUnit и Arquillian.

Выполнение теста "mvn test -Pjbossas-remote-6" (профиль используется для тестов Arquillian для туннелирования выполнения тестов в контейнере на JBoss 6) из корня приложения не удается :

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Sandbox ........................................... SUCCESS [0.003s]
[INFO] Sandbox Common .................................... SUCCESS [45.003s]
[INFO] Sandbox Client .................................... SUCCESS [20.226s]
[INFO] Sandbox Server .................................... SUCCESS [49.064s]
[INFO] Sandbox WebApp .................................... FAILURE [3.128s]
[INFO] Sandbox Application ............................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:57.663s
[INFO] Finished at: Fri Oct 21 10:07:03 CEST 2011
[INFO] Final Memory: 107M/478M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo.webstart:webstart-maven-plugin:1.0-beta-1:jnlp-download-servlet (default) on project sandbox-webapp: Unable to copy an artifact to the working directory: D:\Work\Projets\RT_GAF\Dev\Sandbox\client\target\classes (Access is denied) -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo.webstart:webstart-maven-plugin:1.0-beta-1:jnlp-download-servlet (default) on project sandbox-webapp: Unable to copy an artifact to the working directory
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoExecutionException: Unable to copy an artifact to the working directory
    at org.codehaus.mojo.webstart.JnlpDownloadServletMojo.retrieveJarResources(JnlpDownloadServletMojo.java:454)
    at org.codehaus.mojo.webstart.JnlpDownloadServletMojo.execute(JnlpDownloadServletMojo.java:136)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    ... 19 more
Caused by: java.io.FileNotFoundException: D:\Work\Projets\RT_GAF\Dev\Sandbox\client\target\classes (Access is denied)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:106)
    at org.codehaus.plexus.util.FileUtils.copyFile(FileUtils.java:950)
    at org.codehaus.mojo.webstart.AbstractBaseJnlpMojo.copyJarAsUnprocessedToDirectoryIfNecessary(AbstractBaseJnlpMojo.java:569)
    at org.codehaus.mojo.webstart.JnlpDownloadServletMojo.retrieveJarResources(JnlpDownloadServletMojo.java:423)
    ... 22 more

Как видите, тесты в модулях 'common', 'client' и 'server' выполняются корректно (ууу!), Но выполнение тестов останавливается на уровне модуля webapp дажехотя этот модуль не содержит абсолютно никаких классов (никаких бизнес-классов, никаких тестов).

Обратите внимание, что мы можем видеть ссылки Java Web Start в трассировке стека (" JnlpDownloadServletMojo ").

Что еще более удивительно, в ошибке упоминается путь модуля 'client' , когда ошибка возникает во время обработки модуля 'webapp'.

Если я пытаюсь выполнить тесты напрямую в модуле 'webapp', он работает нормально (пустые строки удалены):

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
There are no tests to run.
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

Ребята, вы знаете, что происходит?Почему выполнение тестов останавливается?И как я могу это исправить?

Спасибо за ваше время.

С уважением

Ответы [ 4 ]

5 голосов
/ 21 октября 2011

Вы используете Maven 3, верно? Вы недавно обновились с Maven 2? Один из ваших плагинов был написан для Maven 2 и не обновлялся для 3. В Maven 3 добавлена ​​поддержка разрешения зависимостей для модулей в реакторе для текущей сборки, что является действительно отличной функцией, но это означает, что зависимость от модуля может разрешиться в каталог сейчас, а не только файлы JAR. Плагины, которые предполагают, что зависимости всегда jar-файлы терпят неудачу, как это.

Для иллюстрации представьте, что у вас есть модули foo и bar, которые оба являются модулями top-level, а bar зависит от foo. В Maven 2, если вы запустите mvn compile в top-level, он, конечно, скомпилирует и foo, и bar. не сможет скомпилировать bar против только что скомпилированной версии foo. Другими словами, если вы просто добавили новый метод в класс в foo, а класс в bar использует его, вы получите ошибку компиляции, запустив mvn compile. Это связано с тем, что Maven 2 имеет возможность разрешать артефакты только из репозитория, а поскольку вы не установили новую версию foo в локальный репозиторий, метод недоступен для bar.

Это было довольно раздражающим и сильно запрошенным изменением, поэтому Maven 3 меняет его. При mvn compile в Maven 3 ${project.build.outputDirectory} из foo будет тем, к чему разрешает зависимость в bar. При таком подходе mvn compile будет работать, потому что сначала компилируется foo, а затем, когда компилируется bar, вместо последнего foo jar в используемом локальном репо, он использует foo/target/classes для удовлетворения Зависимость, которая, конечно, имеет последнюю версию foo в ней.

То, что вы видите, это старый плагин, который предполагает - как это было в Maven 2 - что зависимости всегда разрешаются в файлах. В Maven 3 это не всегда так.

0 голосов
/ 31 августа 2012

Запустите Eclipse от имени администратора. шаги: Щелкните правой кнопкой мыши по затмению и скажите «Запуск от имени администратора».

0 голосов
/ 25 июля 2012

Обратите внимание, что у вашего каталога есть этот файл?Пожалуйста, проверьте это внимательно.

Как только я использовал ant , у меня тоже есть эта проблема.Надеюсь, это поможет вам.

0 голосов
/ 21 октября 2011

Если посмотреть на ошибку, то становится ясно, что у пользователя, запускающего mvn, нет прав доступа к D: \ Work \ Projets \ RT_GAF \ Dev \ Sandbox \ client \ target \ classes.настройки.

Кроме того, что я не могу сказать, не видя файлы POM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...