簡體   English   中英

軟件包在Maven編譯中不存在

[英]Package doesnot exist on maven compilation

項目中存在一個使用ILoggingEvent的類,該類從logback-classic.jar中導入。 它也可以在項目中作為Maven依賴項使用,也可以在.m2文件夾中使用。 但是當我執行mvn clean install時,出現以下錯誤:

[錯誤] /C:/Users/xxx/project/LogMonitor.java:[6,34]程序包

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

找不到符號符號:類ILoggingEvent

當我從jar中提取文件時,我能夠找到與那個jar相同的軟件包。 最重要的是,我也沒有在LogMonitor類中看到任何錯誤標記,盡管它是使用ILoggingEvent的錯誤標記,我嘗試過maven update,project clean。 但是我仍然看到它失敗了。 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>

首先,在父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 )。

您的依賴關系應如下所示:

<!-- 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(未定義范圍時為默認值)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM