我正在尝试为一个现有的企业项目添加maven支持。这是一个多模块项目,前两个模块可以编译和打包,但是当我尝试在多个模块中使用相同的依赖时,遇到了编译错误。
我的项目结构如下:
> + 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上失败,提示包xxx.yyy不存在
和找不到符号XXXYYY
。包xxx.yyy和符号XXXYYY在一个jar文件中,并列在模块2和3的依赖项中。由于两个模块都依赖相同的jar文件,所以我试图仅将其添加到模块2的依赖项中,并认为由于传递依赖关系,模块3应该能看到它,但它无法看到该包。因此,我尝试在模块2和3的pom文件中都添加依赖项,但问题仍然存在。
我已经检查/尝试过以下内容:
- 所请求的jar文件列在我的依赖项中。我运行了以下命令,之后可以在依赖列表中看到所需的.jar文件:
mvn dependency:copy-dependencies
- 如上所述,我尝试通过传递依赖关系和在我的pom文件中直接引用它来放入我的类路径,但两种解决方案都没有起作用
- 我尝试删除整个存储库并重新下载所有内容,但也没有起作用
下面我贴出模块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>
...
模块三
<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中删除依赖项时,它不会出现“包不存在”的错误,但随后会从Module2 jar出现“包不存在”的错误。
看起来有些依赖关系丢失了,因为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`,它就会编译!
自从我发现这个问题以来,我已经参考了这个问题,并且我相信我的类路径出了问题。因为我正在使用Weblogic Portal应用程序,所以我需要在Eclipse上保留一些共享库(那些项目和运行时都需要的库)。可能我的pom文件中忘记了某个库。奇怪的是,编译声称不存在的包实际上确实存在。
X
开关打印调试输出(包含错误信息)吗? - Adonis