gpt4 book ai didi

java - Maven测试执行错误

转载 作者:搜寻专家 更新时间:2023-11-01 02:31:42 25 4
gpt4 key购买 nike

当我使用 Maven 为我的 Java EE 应用程序运行单元测试时,我收到一个奇怪的错误:org.apache.maven.plugin.MojoExecutionException: Unable to copy an artifact to the working directoryjava.io.FileNotFoundException: D:\Work\Projets\RT_GAF\Dev\Sandbox\client\target\classes (Access is denied) 引起

应用程序的 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' 模块,包含 Web 项目(JSP、图像、web.xml 等),绝对没有类或测试,将收到 'common'和“服务器” jar
  • ...\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”模块级别,即使该模块完全不包含任何类(没有商务类(class),没有测试)。

请注意,我们可以在堆栈跟踪中看到 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] ------------------------------------------------------------------------

你们知道这是怎么回事吗?为什么测试执行停止?我该如何解决这个问题?

感谢您的宝贵时间。

问候

最佳答案

您正在运行 Maven 3,对吧?你最近从 Maven 2 升级了吗?您的一个插件是为 Maven 2 编写的,尚未为 3 更新。Maven 3 添加了对解析当前构建的 react 器中模块的依赖性的支持,这是一个非常棒的功能,但这意味着模块依赖性可以现在解析到一个目录,而不仅仅是 jar 文件。假设依赖项总是 jar 文件的插件会像这样失败。

为了说明,假设您有模块 foobar,它们都是 top-levelbar< 的模块 依赖于 foo。对于 Maven 2,如果您在 top-level 中运行 mvn compile,它当然会同时编译 foobar。它不会做的是针对刚刚编译的foo版本编译bar。换句话说,如果您刚刚向 foo 中的类添加了一个新方法,而 bar 中的类使用了它,则运行 会出现编译错误mvn 编译。那是因为 Maven 2 只能从存储库解析 Artifact ,并且由于您没有将新版本的 foo 安装到本地存储库,所以该方法对 bar 不可用

这非常烦人并且是一个强烈要求的更改,因此 Maven 3 对其进行了更改。在 Maven 3 下使用 mvn compilefoo${project.build.outputDirectory} 将成为 bar< 中的依赖项 解析为。使用这种方法,mvn compile 将起作用,因为首先编译 foo,然后编译 bar,而不是最新的 foo jar 在本地 repo 中被使用,它使用 foo/target/classes 来满足依赖,当然,它有最新版本的 foo

您所看到的是一个旧插件,它假定——正如 Maven 2 中的那样——依赖项总是解析为文件。在 Maven 3 下,情况并非总是如此。

关于java - Maven测试执行错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7849296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com