当我使用Maven为我的Java EE应用程序运行单元测试时,我收到一个奇怪的错误:org.apache.maven.plugin.MojoExecutionException:无法将工件复制到 由java.io.FileNotFoundException引起的工作目录:D:\Work\Projets\RT_GAF\Dev\Sandbox\client\target\classes(访问被拒绝)
该应用程序的Maven结构是:
如上所述,我们有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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,'common','client'和'server'模块中的测试正确执行(yay!),但测试执行在'webapp'模块级别停止,即使此模块绝对不包含任何类(没有业务)课程,没有考试).
请注意,我们可以在堆栈跟踪(" JnlpDownloadServletMojo ")中看到Java Web Start引用.
更令人惊讶的是,错误提到了"客户端"模块的路径,而在"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] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
你们知道发生了什么吗?为什么测试执行会停止?我怎么解决这个问题?
感谢您的时间.
问候
你正在运行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 compileMaven的3下的${project.build.outputDirectory}的foo将是什么在依赖bar解析为.使用这种方法,这mvn compile将起作用,因为首先foo编译,然后bar编译时,而不是foo使用本地repo 中的最新jar,它用于foo/target/classes满足依赖,当然,它具有最新版本foo.
您所看到的是一个旧插件,它假设 - 就像在Maven 2中一样 - 依赖性总是解析为文件.在Maven 3下,这并非总是如此.
| 归档时间: |
|
| 查看次数: |
5589 次 |
| 最近记录: |