maven编译上不存在java包
项目中存在一个使用ILoggingEvent的类,该类被发现是从logback classic导入的。罐子它在project中作为maven dependency提供,也在中提供。m2文件夹。但当我进行mvn clean安装时,我会发现以下错误:
[ERROR] /C:/Users/xxx/project/LogMonitor.java:[6,34] package
ch.qos.logback.classic.spi does not exist
cannot find symbol symbol: class ILoggingEvent
当我从jar中提取文件时,我能够找到与该jar相同的包。最重要的是,我在LogMonitor类中也没有看到错误标记,尽管它使用的是ILogingEvent 我试过maven更新,project clean。但我仍然看到它失败了。maven的配置没有问题,因为另一个存储库已经成功构建。请说明如何解决
编辑: 存在此代码的回购协议的pom文件:
<parent>
<groupId>com.common</groupId>
<artifactId>common-pom</artifactId>
<version>0.25.5</version>
</parent>
<artifactId>aws</artifactId>
pom of common:
<groupId>com.common</groupId>
<artifactId>common-pom</artifactId>
<version>0.25.5</version>
<packaging>pom</packaging>
<name>Common</name>
<modules>
<module>xxx</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>xxx</artifactId>
<version>${project.version}</version>
</dependency>
<dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
</dependencies>
# 1 楼答案
首先,在父pom中具有实际依赖关系是一种不好的做法。相反,您应该只在父pom中使用依赖项管理来指定应该使用的依赖项的版本,然后在消费子pom中指定所需的依赖项。否则,您可能会在实际不需要JAR的项目的类路径上使用JAR
简而言之: 父pom(普通pom)应仅包含:
然后,父pom的使用者将包含不带版本号的依赖项:
重要的一点是在某个时刻指定正确的版本号和指定的范围(请参见https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope)