maven编译失败

时间:2009-10-19 14:49:29

标签: maven-2

我有一个奇怪的问题 - 在maven构建过程中无法读取某些类文件。

  1. 我有一个项目A和项目B
  2. 项目B取决于项目A目标JAR文件。
  3. 在项目B编译期间,它无法在项目A JAR文件中读取lib - 尽管指向它的部分是完美的。

    我还检查并验证了maven脚本,这很完美。

    错误:

    [INFO] Compiling 137 source files to V:\dhs_tss_build_view\dhs_tssproject\tss\tsscommon-server\target\classes
    [INFO] ------------------------------------------------------------------------
    [ERROR] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Compilation failure
    
    V:/dhs_tss_build_view/dhs_tssproject/tss/tsscommon-server/src/main/java/us/mn/state/dhs/tss/common/oblix/da/wsdl/OblixLoginAc
    cess.java:[51,60] cannot find symbol
    symbol  : class BusinessException
    location: class us.mn.state.dhs.tss.common.oblix.da.wsdl.OblixLoginAccess
    
    V:/dhs_tss_build_view/dhs_tssproject/tss/tsscommon-server/src/main/java/us/mn/state/dhs/tss/common/app/da/ldap/BaseLdapImpl.j
    ava:[187,14] cannot find symbol
    symbol  : class Phone
    location: class us.mn.state.dhs.tss.common.app.da.ldap.BaseLdapImpl
    
    V:/dhs_tss_build_view/dhs_tssproject/tss/tsscommon-server/src/main/java/us/mn/state/dhs/tss/common/app/da/ldap/BaseLdapImpl.j
    ava:[204,14] cannot find symbol
    symbol  : class Phone
    location: class us.mn.state.dhs.tss.common.app.da.ldap.BaseLdapImpl
    
    
    [INFO] ------------------------------------------------------------------------
    [DEBUG] Trace
    org.apache.maven.BuildFailureException: Compilation failure
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:579)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:499)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:478)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:330
    )
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:291)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:142)
            at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:336)
            at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129)
            at org.apache.maven.cli.MavenCli.main(MavenCli.java:287)
            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:585)
            at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
            at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
            at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
            at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
    Caused by: org.apache.maven.plugin.CompilationFailureException: Compilation failure
            at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:516)
            at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:114)
            at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:451)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:558)
            ... 16 more
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1 minute 56 seconds
    [INFO] Finished at: Mon Oct 19 09:46:53 CDT 2009
    [INFO] Final Memory: 11M/20M
    [INFO] ------------------------------------------------------------------------
    

18 个答案:

答案 0 :(得分:10)

我遇到了同样的问题,这就是我建议您解决的问题:

执行命令

mvn dependency:list

并仔细阅读是否有任何警告消息表明对于某些依赖项,将不存在可传递的依赖项。

如果是,请使用-X标志重新运行它:

mvn dependency:list -X

查看maven抱怨的详细信息(-X标志可能有很多输出)

在我的情况下,依赖maven模块pom.xml存在问题 - 具有托管依赖性。尽管在父pom中定义了托管依赖项的版本,但是Maven无法解决它并且抱怨在依赖的pom.xml中缺少版本

所以我只是配置了丢失的版本,问题就消失了。

答案 1 :(得分:7)

尝试使用:

mvn clean package install

此命令应将您的工件安装在本地maven仓库中。

PS:我看到这是一个老问题,但对未来的某些人来说可能会有所帮助。

答案 2 :(得分:4)

可能是因为堆内存不足。

这听起来很奇怪,但尝试一下,它可能会起作用:

export MAVEN_OPTS='-Xms384M -Xmx512M -XX:MaxPermSize=256M'

资料来源:https://groups.google.com/group/neo4j/msg/e208be9ee1c101d7

答案 3 :(得分:2)

您可以尝试运行“mvn site”命令并查看您拥有的传递依赖项,然后解决潜在的冲突(通过在某处省略隐式依赖项)。只是一个猜测(如果没有看到你的pom信息,知道问题可能有点困难)......

答案 4 :(得分:2)

我有这样的错误,但在

之后

1 /

 mvn eclipse:clean
    mvn eclipse:eclipse -Dwtpversion=2.0

2 / 运行eclipse,打开项目

3 /

mvn package

它的工作

答案 5 :(得分:2)

我遇到了类似的问题,过度搜索后再也没有在网上找到任何内容。

我查看了pom.xml文件,并在依赖项中更改了<dependency>的范围: <scope>test</scope><scope>compile</scope>

以前我只是将它用于测试,但我改变了项目的结构,从来不知道我必须改变它。

  

test: 此范围表示不需要依赖项   正常使用该应用程序,仅适用于测试   编译和执行阶段。

     

compile: 这是默认范围,如果未指定,则使用此范围。编   依赖项在项目的所有类路径中都可用。   此外,这些依赖项将传播到依赖项目。

以下是Apache Maven Docs的参考: https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope

答案 6 :(得分:1)

我猜你的本地maven资源库中的项目是一个错误版本的jar。看起来依赖性已经解决,否则我认为maven没有开始编译,但通常这些编译错误意味着你有一个版本混淆。尝试制作项目A的maven clean install并查看它是否会改变项目B的某些内容...... 此外,有关您的设置的更多信息可能很有用:

  • maven是如何推出的?什么命令?在CI服务器上的shell,IDE(使用插件与否)上?
  • 您正在使用什么maven命令?

答案 7 :(得分:1)

错误很明显:“找不到符号”。某些依赖项无法解析(您甚至无法解析引用跟踪中的行和列):

V:/dhs_tss_build_view/dhs_tssproject/tss/tsscommon-server/src/main/java/us/mn/state/dhs/tss/common/oblix/da/wsdl/OblixLoginAc
cess.java:[51,60] cannot find symbol
symbol  : class BusinessException
location: class us.mn.state.dhs.tss.common.oblix.da.wsdl.OblixLoginAccess

V:/dhs_tss_build_view/dhs_tssproject/tss/tsscommon-server/src/main/java/us/mn/state/dhs/tss/common/app/da/ldap/BaseLdapImpl.j
ava:[187,14] cannot find symbol
symbol  : class Phone
location: class us.mn.state.dhs.tss.common.app.da.ldap.BaseLdapImpl

V:/dhs_tss_build_view/dhs_tssproject/tss/tsscommon-server/src/main/java/us/mn/state/dhs/tss/common/app/da/ldap/BaseLdapImpl.j
ava:[204,14] cannot find symbol
symbol  : class Phone
location: class us.mn.state.dhs.tss.common.app.da.ldap.BaseLdapImpl

下面要验证几件事:

  • 检查或重新检查jar A中的这些类 (与pom中的版本相同)
  • 检查或重新检查B源中的import语句(应与A中的类包匹配)
  • 检查或重新检查B的pom.xml,尤其是对A(它的版本)的依赖声明
  • 检查对B的依赖性是否在B的pom
  • 的某处传递
  • 是SNAPSHOT依赖吗?如果不是,请从本地存储库中删除A并重建

Maven工作正常,你在某处犯了错误。

答案 8 :(得分:1)

我遇到了同样的问题...

如何修复 - 将以下属性添加到pom.xml

<properties>
    <!--  compiler settings -->
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
</properties>        

答案 9 :(得分:1)

转到maven存储库并打开源模块的jar [tip:你可以使用winzip]来验证特定的类。

就我而言,事实并非如此。然后我在下面找到了。

如果您使用的是插件org.apache.felix / maven-bundle-plugin

确保源模块已定义export-package

示例:com.xxx.camel.dao

答案 10 :(得分:1)

依赖关系的顺序也很重要。我有同样的问题。基本上我必须先将scope testscope compile依赖项放在pom.xml中。如果我先放scope compile然后放scope test它将失败。

答案 11 :(得分:0)

在pom.xml中添加<sourceDirectory>src</sourceDirectory>,并提供适当的参考。添加这个解决了我的问题

答案 12 :(得分:0)

现在我也遇到了问题

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project entry-api: Compilation failure: Compilation failure:

package com.foo.entry.common.domain does not exist
package com.foo.entry.common.model does not exist
package com.foo.entry.common.service does not exist
package com.foo.entry.common.util does not exist

花了很长时间才知道原因,这是依赖项jar之一是spring boot fat jar,因此解决方案是移至其pom.xml中的代码下方

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

答案 13 :(得分:0)

运行以下命令后: - mvn clean package install

我发现了这个问题:
'dependencies.dependency.scope' for org.springframework.boot:spring-boot-starter-data-rest:pom must be one of [provided, compile, runtime, test, system] but is 'import'. @ line 13, column 11

其中一个依赖项被标记为“import”。改变“范围”为我解决了这个问题。

答案 14 :(得分:0)

在多模块项目中很容易出现此错误。例如,如果您对模块A,B和C进行了更改,但是然后尝试仅编译模块B,则很容易出现此错误。假设模块B依赖于模块A.由于只编译了模块B,模块A中的类文件现在已经过时并且可能无效。

如果这是您问题的本质,编译所有模块(或以适当的分层依赖顺序排列的模块)可以解决此错误。

答案 15 :(得分:0)

如果您的依赖项很好(请查看mvn dependency:list),就像我的那样,那么这是一个maven故障, 如果您正在使用Eclipse,请执行以下操作:

  1. 右键单击项目&gt; Maven&gt;更新项目......
  2. 检查除脱机后的所有内容
  3. 你应该好。

    我不知道等效的mvn命令,如果有人发布它们就可能有用。

答案 16 :(得分:0)

我有同样的问题(即使项目在Eclipse中编译/工作正常),但在使用命令行构建时却没有。 原因是我没有使用正确的文件夹结构mvn:“src / main / java / com”等。它默认查看这些文件夹(我使用的是“/ scr / main / com”等。导致问题)。

答案 17 :(得分:0)

在你的分类中,抱怨maven是一些依赖,属于某些jar的尝试,这些jar用maven命令重新构建,我使用这个命令mvn clean install -DskipTests=true应该在这种情况下工作,当一些符号来自缺少课程