我正在尝试为现有企业项目添加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,问题仍然存在。
我已经检查过/试过这些:
mvn dependency:copy-dependencies
我的项目唯一的特点是模块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>-->
...
无法看到的包裹位于&#39; SharedArtifact&#39;内。当我从Module2中删除依赖项时,它没有从&#39; SharedArtifact&#39;中提供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上被遗忘了。奇怪的是,汇编声称不存在的包,存在。
答案 0 :(得分:0)
由于我的选项不多,我按照@ user944849和更新 Maven建议的版本3.3.9和我的JDK到1.8.0_60,但保留编译器的源和目标POM的配置指向1.6。
git clone https://github.com/Wizcorp/phonegap-facebook-plugin.git
之后,模块3开始编译,但模块4和5由于依赖某些JRockit库而中断。为了解决这个问题,我最终更新了已弃用的代码,最终完全编译了项目。
所以我相信我使用的Maven版本存在问题。不知何故,当2个项目依赖于同一个lib并且其中一个依赖于另一个时,它似乎迷失了。我还没有测试过其他版本,但3.3.9适用于这些情况。