软件包在Maven编译中不存在

时间:2018-08-28 10:27:11

标签: java maven

项目中存在一个使用ILoggingEvent的类,该类已从logback-classic.jar导入。它也可以在项目中作为Maven依赖项使用,也可以在.m2文件夹中使用。但是当我执行mvn全新安装时,出现以下错误:

  

[错误] /C:/Users/xxx/project/LogMonitor.java:[6,34]包

     

ch.qos.logback.classic.spi不存在

     

找不到符号符号:   ILoggingEvent类

当我从jar中提取文件时,我能够找到与那个jar相同的软件包。最重要的是,尽管它是使用ILoggingEvent的类,但我在LogMonitor类中也没有看到错误标记。 我尝试过Maven更新,项目清理。但是我仍然看到它失败了。 Maven的配置没有问题,因为成功构建了另一个存储库。请帮忙解决该问题

编辑: 存在此代码的repo的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>

2 个答案:

答案 0 :(得分:1)

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

简而言之: 父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)。

答案 1 :(得分:-1)

您的依赖关系应如下所示:

<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.3</version>
</dependency>

范围可能设置为<scope>test</scope>。如果要在src/main/java中使用它,则必须将范围设置为compile(未定义范围时默认)