当我使用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)从应用程序的根失败:< / p>
[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 ”)。
更令人惊讶的是,在处理'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] ------------------------------------------------------------------------
你们知道发生了什么吗?为什么测试执行会停止?我怎么解决这个问题?
感谢您的时间。
此致
答案 0 :(得分:5)
你正在运行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
无法使用该方法。 / p>
这非常令人讨厌并且需要大量更改,因此Maven 3对其进行了更改。在Maven 3下使用mvn compile
,${project.build.outputDirectory}
的{{1}}将成为foo
中的依赖关系解析的内容。使用这种方法,bar
将起作用,因为编译了第一个mvn compile
,然后编译foo
时,而不是使用本地存储库中的最新bar
jar,它使用foo
来满足依赖关系,当然,其中包含最新版本的foo/target/classes
。
你所看到的是一个旧的插件,它假设 - 就像在Maven 2中一样 - 依赖性总是解析为文件。在Maven 3下,情况并非总是如此。
答案 1 :(得分:0)
通过查看错误,很明显运行mvn的用户没有访问权限D:\ Work \ Projets \ RT_GAF \ Dev \ Sandbox \ client \ target \ classes检查目录的读写访问权限设置。
除此之外我不能说没有看到pom文件。
答案 2 :(得分:0)
请注意你的目录有这个文件?请仔细检查。
一旦我使用了 ant ,我也遇到了这个问题。希望这可以帮到你。
答案 3 :(得分:0)
以管理员身份运行eclipse。 脚步: 右键单击eclipse,然后以管理员身份运行。