Maven编译失败。

28

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

  1. 我有一个名为A的项目和一个名为B的项目。
  2. 项目B依赖于项目A的目标JAR文件。

在编译项目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] ------------------------------------------------------------------------

请添加POM文件中相关的部分。 - jitter
a<-- b,而b的pom文件是: <dependency> <groupId>us.mn.state.dhs.tss.common</groupId> <artifactId>b</artifactId> <version>2.39.00-SNAPSHOT</version> </dependency> - dagg
嗨,这肯定会对你有所帮助: https://dev59.com/xmkw5IYBdhLWcg3wbqGZ#17683183 - JohannesH
@dagg 你找到任何解决方案了吗...? - Saurabh Kumar
@dagg,我目前遇到了这个问题,并且我按照提到的所有原因进行了操作。但是我无法解决它。你解决了这个问题吗? - irs102info
18个回答

11

我遇到了相同的问题,以下是我建议你解决它的方法:

运行:

mvn dependency:list

如果有任何警告信息表明某些依赖项没有可用的传递依赖项,请仔细阅读并注意。

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

mvn dependency:list -X

查看详细信息,了解Maven抱怨的内容(使用-X标志可能会产生很多输出)

在我的情况下,依赖的Maven模块pom.xml存在问题——与托管依赖项相关。尽管在父POM中定义了受管理依赖项的版本,但Maven无法解析它,并抱怨依赖的pom.xml缺少版本。

因此,我只需配置缺少的版本,问题就消失了。


4
我有同样的问题,按照你的指示操作后,mvn dependency:list 没有返回任何警告信息。你还有什么进一步的建议吗? - Leonmax
1
是的,我这里也没有警告信息。 - Stainedart
1
你的问题可能与我的不同,所以你可能需要不同的解决方案。然而,我已经放弃了使用Maven,而是一段时间前开始在Java项目中使用Gradle。 - Michal Moravcik

7

尝试使用:

mvn clean package install

这个命令可以将你的工件安装到本地的Maven仓库中。
PS: 我看到这是一个旧问题,但它可能对未来的某些人有帮助。

4

这可能是由于堆内存不足导致的。

听起来很奇怪,但尝试一下,也许就能解决问题:

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

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

该问题是关于创建索引。Neo4j 3.0及更高版本中,推荐使用Label而不是Type来定义节点类型。因此,使用CREATE INDEX语句创建索引时,应该将标签(Label)作为第一个参数,而不是节点类型(Type)。例如:CREATE INDEX ON :Person(name)。


1
在Windows上做这个有什么建议吗? - Phillip Scott Givens

3

我曾经遇到过类似的问题,在进行了大量搜索后,仍然没有找到任何有用的信息。

我检查了 pom.xml 文件,在依赖项中将 <dependency> 的作用范围从 <scope>test</scope> 更改为 <scope>compile</scope>

之前我只在测试中使用它,但是我更改了项目结构并不知道我必须更改这个。

test: 这个作用范围表示该依赖项不需要在应用程序的正常使用中,只在测试编译和执行阶段可用。

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

以下是来自Apache Maven文档的参考链接: https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope


2

i have an error like this, but after

1/

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

运行Eclipse,并打开项目。
第3步。
mvn package

它工作了


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

1
实际上,父项目和子项目都没有站点目标。当编译项目B时,我遇到了失败的情况,而项目A却成功编译。 - dagg
1
我遇到了类似的问题。这并没有帮助我解决它,但是非常有信息量。 - Phillip Scott Givens

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源代码中的导入语句(应该与A中的类包匹配)
  • 检查或重新检查B的pom.xml文件,特别是对A依赖的声明(它的版本号)
  • 检查A的依赖是否在B的pom文件中被排除了
  • A是一个快照依赖吗?如果不是,请从本地仓库中删除A并重新构建

Maven工作正常,你在某个地方犯了错误。


1
我有同样的问题...
如何解决 - 在pom.xml中添加以下属性
<properties>
    <!--  compiler settings -->
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
</properties>        

1
请到Maven仓库并打开源模块的JAR文件[提示:您可以使用WinZip]以验证特定类是否存在。
在我的情况下,它不存在。然后我发现了以下内容。
如果您正在使用org.apache.felix/maven-bundle-plugin插件,请确保源模块定义了export-package。
例如:com.xxx.camel.dao

1

依赖项的顺序也很重要。我曾遇到过同样的问题。基本上,我必须先在 pom.xml 中放置 scope test,然后是 scope compile 依赖项。如果我先放置 scope compile,然后是 scope test,它将失败。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接