我试图将maven支持添加到现有的企业项目中。这是一个多模块项目,前两个模块编译和打包时没有问题,但是我正面临编译错误,我尝试在多个模块中使用相同的依赖项。 我的结构是: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上失败,说明package xxx.yyy does not exist
和Cannot find symbol XXXYYY
。包xxx.yyy和符号XXXYYY是在模块2和3的依赖项上列出的jar中。
由于两个模块都依赖于同一个jar,所以我试图只在模块2上添加依赖关系,而我相信模块3应该看到它是因为传递依赖性,但它看不到该包。所以我试图添加依赖到模块2和3 poms,问题依然存在。
我已经检查/尝试了这些:
- 请求的罐子是我的依赖条件上市。我已经运行了下面的命令,然后我可以在依赖关系列表中看到所需的.jar文件:
mvn dependency:copy-dependencies
- 正如我上面所说的,我尝试通过传递依赖项放入我的类路径并直接引用它POM和两种解决方案没有奏效
- 我试图删除我的整个仓库,并再次下载的一切,也没有工作
我的项目的唯一特殊性在于,模块3取决于模块2和依赖在模块2也依赖的库上。
下面我粘贴模块2和3中的poms。由于公司政策,我更改了一些名称。
模块-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_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上保留一些共享库(项目和运行时需要的库)。可能有些图书馆正在被遗忘。奇怪的是,编译声称不存在的软件包存在。
您可以用'X'开关打印调试输出(包含错误) – Adonis
由于某些公司不允许我公开的名称,我无法粘贴整个输出。我正在编辑与给出的错误的问题。当我使用-XI运行时,请在类路径中看到我需要的jar,Java和Maven版本是正常的,并且从编译错误 – cristianorbs
FWIW开始如预期的那样,应该可以升级Java和Maven以供构建和使用旧Java运行时。您只需确保Java源代码和目标在您的POM中配置为1.6,您可以通过配置单个插件(Compiler,Surefire等)或使用工具链手动执行此操作。如果您担心新的Java漏洞,使用动物嗅探器插件和/或maven-enforcer来破坏构建,如果使用更新的类。 – user944849