当打开其中一个解析项目时,Eclipse 中的解析工作区工件选项会生成错误

Resolve workspace artifacts option in Eclipse generates error when one of the resolving projects is opened

我有一个 Maven 项目 A,有 4 个子模块。我有另一个 Maven 项目 B,没有任何子模块。 A的4个子模块之一,引用项目B.

当我对项目 A 进行全新安装时,我收到一条错误消息:

[错误] 无法在项目 dca-web 上执行目标 org.apache.maven.plugins:maven-war-plugin:2.2:war(默认-war):无法为工件 [be.vlaanderen.dwse:dwse-doc-tools:jar:3.2.2:compile] 复制文件:/Users/Fabrizio/ontwikkeling/projecten/doc-tools/target/classes(是一个目录)

启用调试信息时:很清楚是什么问题:

[错误] 无法在项目 dca-web 上执行目标 org.apache.maven.plugins:maven-war-plugin:2.2:war(默认-war):无法为工件 [be.vlaanderen.dwse:dwse-doc-tools:jar:3.2.2:compile] 复制文件:/Users/Fabrizio/ontwikkeling/projecten/doc-tools/target/classes(是一个目录)-> [帮助 1] org.apache.maven.lifecycle.LifecycleExecutionException: 无法在项目 dca-web 上执行目标 org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war): 失败复制工件 [be.vlaanderen.dwse:dwse-doc-tools:jar:3.2.2:compile] 的文件 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 在 org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:355) 在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155) 在 org.apache.maven.cli.MavenCli.execute(MavenCli.java:584) 在 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:216) 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:160) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:483) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 在 org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

原因:org.apache.maven.plugin.MojoExecutionException:无法为工件复制文件 [be.vlaanderen.dwse:dwse-doc-tools:jar:3.2.2:compile] 在 org.apache.maven.plugin.war.packaging.ArtifactsPackagingTask.performPackaging(ArtifactsPackagingTask.java:131) 在 org.apache.maven.plugin.war.packaging.WarProjectPackagingTask.handleArtifacts(WarProjectPackagingTask.java:190) 在 org.apache.maven.plugin.war.packaging.WarProjectPackagingTask.performPackaging(WarProjectPackagingTask.java:109) 在 org.apache.maven.plugin.war.AbstractWarMojo.buildWebapp(AbstractWarMojo.java:472) 在 org.apache.maven.plugin.war.AbstractWarMojo.buildExplodedWebapp(AbstractWarMojo.java:404) 在 org.apache.maven.plugin.war.WarMojo.performPackaging(WarMojo.java:215) 在 org.apache.maven.plugin.war.WarMojo.execute(WarMojo.java:177) 在 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) ... 还有 19 个

原因:java.io.FileNotFoundException:/Users/Fabrizio/ontwikkeling/projecten/doc-tools/target/classes(是一个目录) 在 java.io.FileInputStream.open(本机方法) 在 java.io.FileInputStream.(FileInputStream.java:138) 在 org.codehaus.plexus.util.io.FileInputStreamFacade.getInputStream(FileInputStreamFacade.java:36) 在 org.codehaus.plexus.util.FileUtils.copyStreamToFile(FileUtils.java:1141) 在 org.codehaus.plexus.util.FileUtils.copyFile(FileUtils.java:1048) 在 org.apache.maven.plugin.war.packaging.AbstractWarPackagingTask.copyFile(AbstractWarPackagingTask.java:293) 在 org.apache.maven.plugin.war.packaging.AbstractWarPackagingTask$1.registered(AbstractWarPackagingTask.java:150) 在 org.apache.maven.plugin.war.util.WebappStructure.registerFile(WebappStructure.java:211) 在 org.apache.maven.plugin.war.packaging.AbstractWarPackagingTask.copyFile(AbstractWarPackagingTask.java:145) 在 org.apache.maven.plugin.war.packaging.ArtifactsPackagingTask.performPackaging(ArtifactsPackagingTask.java:106)

但是文件夹target/classes是一个目录!所以我猜其中一个 Maven 插件中某处存在错误...

当我关闭项目B时,没有问题。所以打开引用的项目会产生问题...

我需要打开项目 B,因为我在 Tomcat 中使用项目 A 作为 Web 应用程序。当我打开项目 B 并更改文件并保存它时,Eclipse 会进行增量发布,因此 Tomcat 不需要重新部署或重新启动!这为我节省了 30 秒的每次文件更改时间!所以保持这个项目的开放是非常重要的...

我找到了解决方案。显然,eclipse luna(或任何基于 ide 的 eclipse luna)正在使用嵌入式版本的 maven,而后者又使用 maven-war-plugin 版本 2.2。在我的pom中添加2.6版本后,它解决了这个问题!

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
        </plugin>
    </plugins>
</build>