【问题标题】:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile未能执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
【发布时间】:2015-11-26 20:58:45
【问题描述】:

鉴于以下 pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.myApp</groupId>
    <artifactId>malloc</artifactId>
    <version>0.0.1</version>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <repositories>
        <repository>
            <id>project</id>
            <url>file:///${basedir}/lib</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>com.myApp</groupId>
            <artifactId>myApp.core</artifactId>
            <version>1.0.0</version>
        </dependency>
        ... //other dependencies
    </dependencies>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <resources>
            <resource>
                <directory>src</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                        <addClasspath>true</addClasspath>
                         </manifest>
                         <addMavenDescriptor>false</addMavenDescriptor>
                    </archive>
                    <webResources>
                         <webResource> 
                           <directory>${project.build.directory}/WebContent/WEB-INF</directory> 
                           <includes> 
                             <include>web.xml</include> 
                           </includes> 
                           <targetPath>WEB-INF</targetPath> 
                           <filtering>true</filtering> 
                         </webResource>
                    </webResources>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.10</version>
                <executions>
                    <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                            <outputDirectory>${project.build.directory}/WebContent/WEB-INF/lib</outputDirectory>
                            <includeScope>runtime</includeScope>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

以及以下项目结构:

我希望 maven-dependency-plugin 会将所有依赖项复制到 WebContent/WEB-INF/lib 但是当我运行时

mvn clean install

产生以下错误:

[INFO] Scanning for projects...
[INFO] 
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building api-malloc 0.0.1
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for com.oracle:ojdbc6:jar:10.2.0.4.0 is missing, no dependency information available
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ api-malloc ---
[INFO] Deleting C:\Development\malloc\target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ api-malloc ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ api-malloc ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 8 source files to C:\Development\malloc\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /C:/Development/malloc/src/com/myApp/api/malloc/dto/RegionTypeDTO.java:[3,34] package com.myApp.api.core.dto does not exist
[ERROR] /C:/Development/malloc/src/com/myApp/api/malloc/dto/RegionTypeDTO.java:[5,39] cannot find symbol
  symbol: class IDTO
[INFO] 26 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.209 s
[INFO] Finished at: 2015-11-26T15:33:40-05:00
[INFO] Final Memory: 21M/227M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project malloc: Compilation failure: Compilation failure:
[ERROR] /C:/Development/malloc/src/com/myApp/api/malloc/dto/RegionTypeDTO.java:[3,34] package com.myApp.api.core.dto does not exist
[ERROR] /C:/Development/malloc/src/com/myApp/api/malloc/dto/RegionTypeDTO.java:[5,39] cannot find symbol
[ERROR] symbol: class IDTO

[ERROR] location: class com.myApp.api.malloc.controllers.TestController
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

我注意到 WEB-INF/lib 文件夹总是空的,没有复制 maven 依赖项。

我怀疑 copy-dependencies 插件在编译阶段之前没有运行,但我真的不知道 - 我错过了什么?

【问题讨论】:

  • 为什么要更改默认源文件夹?为什么不使用 conventions 呢?此外,为什么要使用 file:///... 定义存储库,这没有意义,因为 war 插件会自动将所有依赖项自动打包到 WEB-INF/libfolder 中。如果您从 lib 文件夹中获取所有 jar 以用作这是您构建的一部分,这超出了 Maven 的想法......
  • @khmarbaise file:/// 指向一个本地文件夹,默认情况下不是由 maven 管理的。
  • 您应该更改哪个以将这些工件上传到存储库管理器并将它们用作通常的依赖项...

标签: java eclipse maven maven-3 maven-dependency-plugin


【解决方案1】:

如果编译失败,copy-dependencies 目标确实永远不会执行,因为它的绑定是在 compile 阶段之后的package 阶段(默认情况下,Maven 编译器插件链接到该阶段)。

如果希望它在compile 阶段之前运行,则需要更改copy-dependencies 目标执行的阶段值。更改为 process-resources 应该没问题,也应该有意义。

<phase>package</phase>

有关阶段的完整描述,您可以查看官方文档,here

您还应该修复构建输出指向的编译错误。我看到 sourceDirectory 元素覆盖了 Maven 默认使用的 Java 源代码 (src\main\java),因此我想您的代码直接位于 src 文件夹下。

更新the package X does not exist 错误发生在代码引用 Java 编译器未解析的包时,因此它无法在类路径中看到该包,这意味着在声明的依赖项:myApp.core 是否包含该包和类?如果是,那么 repositories 元素(lib 文件夹)可能没有正确提供 myApp 依赖项。

您可以尝试使用指定here 的Maven 安装插件在.m2 maven 缓存中本地安装依赖项。 您可以从命令行执行如下:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file  
       -Dfile=lib\myApp.core-1.0.0.jar \
       -DgroupId=com.myApp \
       -DartifactId=myApp.core \
       -Dversion=1.0.0 \
       -Dpackaging=jar \

旁注:Maven 更喜欢小写的 groupid 和 artifactid 标记。此外,Maven 约定也使用破折号来分隔标记(即myapp-core),而不是使用驼峰式大小写(即myApp)。

【讨论】:

  • hmm,我尝试了进程资源,但在 pom 文件中出现以下错误:生命周期配置未涵盖插件执行:org.apache.maven.plugins:maven-dependency-plugin:2.10 :copy-dependencies(执行:copy-dependencies,阶段:process-resources)
  • 但是你真的需要在编译之前执行它还是你真的想检查它而不考虑编译错误?否则,你应该首先修复编译错误,然后检查复制依赖执行保持包阶段。
  • 此外,如果 Eclipse 提示您执行未涵盖的错误,您可以忽略它,这是一个 m2e 错误(Eclipse Maven 集成插件),始终依赖命令行执行 Maven。如果 Maven 构建成功,即使在 process-resources 阶段,您也可以忽略 Eclipse 错误(可悲但确实如此)。
  • 代码在文件夹中:${basedir}/src/com/myApp/api/malloc - 所以包是这样定义的,这就是为什么 sourceDirecotry 是 /src/。它说缺少的 com.myApp.api.core.dto 来自 ${basedir}/lib 内的 maven 依赖库。您认为我错过的正确配置是什么?
  • 关于 2),当代码引用 Java 编译器未解析的包时,会出现“包 X 不存在错误”,因此无法在类路径中看到该包,这意味着在声明的依赖项中: myApp.core 是否包含该包和类?如果是,那么 repositories 元素(lib 文件夹)可能没有正确提供 myApp 依赖项。您可以尝试使用此处指定的 Maven 安装插件在 .m2 maven 缓存中本地安装依赖项maven.apache.org/plugins/maven-install-plugin/examples/…
猜你喜欢
  • 2022-01-04
  • 2018-10-05
  • 2021-03-11
  • 2015-05-03
  • 2019-04-09
  • 1970-01-01
  • 2017-02-18
  • 2013-05-30
  • 2017-06-23
相关资源
最近更新 更多