java - 打开其中一个解决项目时,Eclipse中的“解决工作空间 Artifact ”选项会生成错误

标签 java eclipse maven artifact hotdeploy

我有一个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(默认为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插件中的某个地方有一个bug ...

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

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

最佳答案

我找到了解决方案。显然,eclipse luna(或任何基于eclipse luna的ide)都使用嵌入式版本的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>

关于java - 打开其中一个解决项目时,Eclipse中的“解决工作空间 Artifact ”选项会生成错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30888957/

相关文章:

java - Android 中检测触摸事件何时结束

eclipse - Scala Worksheet Eclipse 插件中的结果编码

angular - 应该在 SVN 中为 Angular 项目提交哪些文件?

java - Maven 的 AspectJ 模块依赖 - 如何使用依赖模块的类型间声明方法

java - jar 顶层内的多个入口点(主类)

java - 读取端口数据 COMM(串行事件监听器)- Java

java - 有没有办法仅通过 key 对获取对和值映射的值?

java - 我通过intellij idea运行Kettle 8.3源,无法实例化类org.pentaho.di.engine.ui.RunConfigurationLifecycleListener

android - 使用 HTML5 和 eclipse android 插件

java - Maven 中提供的和运行时的传递范围