java - Maven编译错误: package does not exist

标签 java maven module compilation dependencies

我正在尝试为现有的企业项目添加 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找不到符号 XXXYYY。包 xxx.yyy 和符号 XXXYYY 位于一个 jar 中,该 jar 列在模块 2 和 3 的依赖项中。

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

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

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

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

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

模块二

<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>

    ...

第三单元

<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,它会编译!

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

最佳答案

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

关于java - Maven编译错误: package does not exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43214715/

相关文章:

使用彼此本地对象的模块

java - 哪个是正确的选择?绳索?

scala - 在 IntelliJ IDEA 中导入 Scala3 SDK

java - 通过循环列表从 JPA 元模型获取 SingularAttribute

linux - 找不到错误 : Module java. base,在 Fedora 上尝试 jlink 时需要

java - 将java应用程序部署到子目录

r - 如何在 golem Shiny 应用程序中包含 R6 对象以跨模块共享数据

python - 没有名为 'pandas._libs.tslib' 的模块

java - vaadin 面板之间的巨大空间

java - 为什么 "x*y/z"会导致不正确的负值?