我正在尝试为现有的企业项目添加 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_29 和 Maven 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/