繁体   English   中英

Maven 编译错误:package 不存在

[英]Maven compilation error: package does not exist

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

> + 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 package xxx.yyy 和符号 XXXYYY 位于模块 2 和 3 的依赖项中列出的 jar 中。

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

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

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

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

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

模块二

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

    ...

而看不到的package在“SharedArtifact”里面。 当我从 Module2 中删除依赖项时,它不会给出来自“SharedArtifact”package 的package does not exist错误。 但随后它给出了package does not exist的 package。

由于 Module3 两者都依赖于它们,因此看起来依赖关系正在以某种方式丢失。

我正在使用Java 1.6.0_29Maven 3.0.5 And I can't upgrade to Java 7, because the project needs Java 6. And can't upgrade Maven, cause upgraded Maven only works with java 7 and higher.

更新 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 上忘记了一些图书馆。 奇怪的是,编译声称不存在的 package 确实存在。

由于我的选项不多,我按照@ user944849的建议并将Maven 更新为版本3.3.9,将JDK 更新为1.8.0_60,但保持源和目标指向1.6的POM编译器配置。

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

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

所以我相信我使用的Maven版本存在问题。 不知何故,当2个项目依赖于同一个lib并且其中一个依赖于另一个时,它似乎迷失了。 我没有测试过其他版本,但3.3.9适用于这些情况。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM