有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    首先,在父pom中具有实际依赖关系是一种不好的做法。相反,您应该只在父pom中使用依赖项管理来指定应该使用的依赖项的版本,然后在消费子pom中指定所需的依赖项。否则,您可能会在实际不需要JAR的项目的类路径上使用JAR

    简而言之: 父pom(普通pom)应仅包含:

     <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>ch.qos.logback</groupId>
           <artifactId>logback-core</artifactId>
           <version>1.1.3</version>
         </dependency>
         <dependency>
           <groupId>ch.qos.logback</groupId>
           <artifactId>logback-classic</artifactId>
           <version>1.1.3</version>
         </dependency>
       </dependencies>
     <dependencies>
    <dependencyManagement>
    

    然后,父pom的使用者将包含不带版本号的依赖项:

    <dependencies>
     <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-core</artifactId>
     </dependency>
     <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
     </dependency>
    

    重要的一点是在某个时刻指定正确的版本号和指定的范围(请参见https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope