Maven编译错误:包不存在

问题描述 投票:0回答:2

我正在尝试向现有企业项目添加 Maven 支持。这是一个多模块项目,前 2 个模块编译和打包没有问题,但我面临编译错误,我尝试在多个模块中使用相同的依赖项。 我的结构是:

> + parent
>    - pom.xml
>    - module-1
>    -   pom.xml
>    - module-2  (Depends on module-1)
>    -   pom.xml
>    - module-3
>    -   pom.xml (Depends on both modules 1 and 2)

我在 Eclipse 上打开了项目,没有显示任何错误。当我从父级运行

mvn clean install
时,它成功安装了模块 1 和 2,但在模块 3 上失败,并显示
package xxx.yyy does not exist
Cannot find symbol XXXYYY
。包 xxx.yyy 和符号 XXXYYY 位于一个 jar 内,该 jar 列在模块 2 和 3 的依赖项上。

由于两个模块都依赖于同一个 jar,我尝试仅添加对模块 2 的依赖关系,并且我相信模块 3 由于传递依赖关系应该看到它,但它看不到该包。所以我尝试将依赖项添加到模块 2 和 3 pom,但问题仍然存在。

我已经检查/尝试过这些:

  • 请求的 jar 列在我的依赖项中。我运行了以下命令,之后我可以在依赖项列表中看到所需的 .jar 文件:
    mvn dependency:copy-dependencies
  • 正如我上面所说,我尝试通过传递依赖项放入类路径并直接在我的 pom 上引用它,但这两种解决方案都不起作用
  • 我尝试删除整个存储库并再次下载所有内容,但也不起作用

我的项目的唯一特殊性是模块 3 依赖于模块 2,并且依赖于模块 2 也依赖的库。

下面我粘贴了模块 2 和 3 中的 pom。由于公司政策,我更改了一些名称。

模块2

<project xmlns="http://maven.apache.org/POM/4.0.0" ... >  
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.company</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

  <artifactId>Module2</artifactId>    
  <dependencies>

      <dependency>
          <groupId>com.company</groupId>
          <artifactId>Module1</artifactId>
          <version>0.0.1-SNAPSHOT</version>
      </dependency>         

    <dependency>
        <groupId>com.company</groupId>
        <artifactId>SharedArtifact</artifactId>
        <version>1.1</version>
     </dependency>

    ...

模块3

<project xmlns="http://maven.apache.org/POM/4.0.0" ... >  
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.company</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

  <artifactId>Module3</artifactId>    
  <dependencies>

      <dependency>
          <groupId>com.company</groupId>
          <artifactId>Module2</artifactId>
          <version>0.0.1-SNAPSHOT</version>
      </dependency>         

    <!--<dependency>
        <groupId>com.company</groupId>
        <artifactId>SharedArtifact</artifactId>
        <version>1.1</version>
     </dependency>-->

    ...

看不到的包位于“SharedArtifact”内部。当我从 Module2 中删除依赖项时,它不会从“SharedArtifact”包中给出

package does not exist
错误。但随后它给出了 Module2 jar 中的
package does not exist

看起来依赖关系不知何故丢失了,因为 Module3 依赖于它们两者。

我正在使用 Java 1.6.0_29Maven 3.0.5。而且我无法升级到Java 7,因为该项目需要Java 6。并且无法升级Maven,因为升级后的Maven仅适用于java 7及更高版本。

更新1:

我编译的时候报错如下:

[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] \Users\usuario\Documents\workspaces\myworkspace\qa\Module3\src\com\company\sharedartifact\package\SomeClass.java:[8,55] 
package com.company.sharedartifact.package  does not exist
[ERROR] \Users\usuario\Documents\workspaces\myworkspace\qa\Module3\src\com\company\sharedartifact\package\SomeClass.java:[9,55] 
package com.company.sharedartifact.package does not exist
[ERROR] \Users\usuario\Documents\workspaces\myworkspace\qa\Module3\src\com\company\sharedartifact\package\SomeClass.java:[17,85] 
cannot find symbol
symbol  : class SomeOtherClass

由于公司政策,我无法粘贴整个 -X 日志,但如果某些部分是必要的,我可以更改一些名称。

更新2:

今天我刚刚发现,如果运行

mvn clean install
,它无法编译。但是如果我运行
mvn clean
,那么(在 Eclipse 中)我运行
Maven Update project
,然后 `mvn install,它会编译!

自从我发现这个以来,我已经提到了这个问题并且我相信我的类路径有问题。当我使用 Weblogic Portal 应用程序时,我需要在 Eclipse 上保留一些共享库(项目和运行时都需要的库)。可能某些库被遗忘在我的 pom 上。奇怪的是,编译声称不存在的包确实存在。

java maven module compilation dependencies
2个回答
0
投票

我遇到了同样的问题,我使用全新安装构建了项目 并选择:解决工作区工件并成功构建项目。


-2
投票

由于我没有选择,所以我按照@user944849和更新的建议将Maven更新为3.3.9版本,将我的JDK更新为1.8.0_60,但将POM的编译器配置的源和目标保留为指向1.6 .

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>        
  <configuration>
     <source>1.6</source>
     <target>1.6</target>
  </configuration>
</plugin>

之后,模块 3 开始编译,但模块 4 和 5 由于依赖某些 JRockit 库而损坏。为了解决这个问题,我最终更新了已弃用的代码,并且项目最终完全编译了。

所以我相信我使用的 Maven 版本有问题。不知何故,当两个项目依赖于同一个库并且其中一个项目依赖于另一个项目时,它似乎会迷失方向。我没有测试过其他版本,但 3.3.9 对于这些情况工作得很好。

© www.soinside.com 2019 - 2024. All rights reserved.