我正在尝试向现有的企业项目添加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不存在
,找不到符号XXXYYY
。包裹xxx。yyy和符号XXXYYY位于模块2和3的依赖项上列出的jar中。
由于两个模块都依赖于同一个jar,我试图只在模块2上添加依赖项,我认为模块3应该看到它,因为它具有可传递的依赖项,但它看不到包。因此,我尝试将依赖性添加到模块2和3 POM中,但问题依然存在。
我已经检查/尝试过这些:
mvn依赖:复制依赖
我的项目唯一的特殊性是模块3依赖于模块2,并且依赖于模块2也依赖的库。
下面我将粘贴模块2和模块3中的POM。因为公司的政策,我改了一些名字。
模块-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”包中的包不存在
错误。但是它给出了Module2 jar中不存在的包。
看起来,由于模块3同时依赖于它们,依赖性不知怎么地消失了。
我使用的是Java 1.6.029和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门户应用程序时,我需要在Eclipse上保留一些共享库(项目和运行时都需要的库)。可能我的pom上忘记了某个图书馆。奇怪的是,汇编声称不存在的包确实存在。
因为我已经没有选项了,所以我按照@user944849的建议,将Maven更新为3.3.9版,将JDK更新为1.8.0_60,但将POM的编译器配置的源代码和目标代码保持在1.6。
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
之后,模块3开始编译,但是模块4和5由于依赖于一些JRockit库而中断。为了解决这个问题,我最终更新了弃用的代码,项目最终被完全编译。
所以我相信我使用的Maven版本有问题。不知何故,当两个项目依赖于同一个lib,其中一个依赖于另一个时,它似乎丢失了。我还没有测试过其他版本,但是3.3.9在这些情况下运行良好。
当我试图通过[mvn clean install-DskipTests]通过控制台构建项目时,我得到了一个错误。我在测试中使用testNG SoftAssert,在测试类中我刚刚添加了一个导入组织。测试NG。断言。但是看起来maven没有看到这个包。控制台出错: 包org.testng.asserts不存在 我的pom。xml看起来像
我在Eclipse中使用maven创建了一个webapp项目。当我在命令提示符下运行命令mvn包时,它会显示folowing错误。 我尝试更改jdk和JRE。但不起作用。仍然显示相同的错误
得到如下错误: Jenkins编译错误 [javac] /var/lib/jenkins/workspace/CWL_Smoke_New/SeleniumFW/CWL_NewSuite/src/com/collegeweeklive/common/AppLibrary.java:14:错误:包org.apache.commons.lang3不存在 [javac]导入org.apache.commo
我正在做一个类项目,需要使用Maven作为JavaFx项目的构建工具。 这是我的pom.xml设置,我在其中使用了2个插件。根据我的理解:是强制java jdk 1.8作为编译器,是自动下载javafx库。 另外,我的主启动器main.java文件位于。与文件夹处于同一级别。 然而,编译总是失败。 我不知道哪一步错了...任何想法都将不胜感激。
我有一个(看似)简单的maven问题我无法解决。在我的POM中,我指定了一个对openrdf-sesame的依赖关系,如下所示: 我有什么遗漏吗?我在我的POM中找不到任何错误。
问题内容: 我有一个包,其中导入了javax.servlet。和javax.servlet.http。,当我尝试在命令提示符下对其进行编译时,出现错误 软件包javax.servlet不存在 我使用JDK 1.7.0和Tomcat 6.0。 问题答案: 您需要将Tomcat 文件的路径添加到编译时类路径。 Java需要在类路径中查找导入的依赖项。否则,它将默认为上面示例中包含的当前文件夹。的是Wi