2017-09-04 214 views
1

我有一個多模塊maven項目。請在下方找到母公司POM。maven項目中未包含Maven項目的日誌依賴項

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.rohit.patterns</groupId> 
    <artifactId>design-patterns</artifactId> 
    <version>1.0.1</version> 
    <packaging>pom</packaging> 

    <name>React.js Blank Project (from https://github.com/making/maven-reactjs-blank)</name> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <slf4j.version>1.7.21</slf4j.version> 
     <logback.version>1.1.7</logback.version> 
    </properties> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <version>1.8</version> 
       <executions> 
        <execution> 
         <id>gulp</id> 
         <phase>generate-resources</phase> 
         <goals> 
          <goal>run</goal> 
         </goals> 
         <configuration> 
          <target> 
           <echo message="Gulp!" /> 
           <exec executable="gulp"> 
            <arg value="build" /> 
           </exec> 
          </target> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <artifactId>maven-resources-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>copy-resources</id> 
         <phase>generate-resources</phase> 
         <goals> 
          <goal>copy-resources</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${basedir}/target/classes/META-INF/resources</outputDirectory> 
          <resources> 
           <resource> 
            <directory>dest</directory> 
            <filtering>false</filtering> 
           </resource> 
          </resources> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
    <modules> 
     <module>cache</module> 
    </modules> 
    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-api</artifactId> 
       <version>${slf4j.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>ch.qos.logback</groupId> 
       <artifactId>logback-classic</artifactId> 
       <version>${logback.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>ch.qos.logback</groupId> 
       <artifactId>logback-core</artifactId> 
       <version>${logback.version}</version> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 
</project> 

孩子POM如下。

<?xml version="1.0"?> 
<project 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>com.rohit.patterns</groupId> 
     <artifactId>design-patterns</artifactId> 
     <version>1.0.1</version> 
    </parent> 
    <groupId>com.rohit.patterns</groupId> 
    <artifactId>cache</artifactId> 
    <version>1.0.1</version> 
    <name>cache</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
</project> 

我宣佈從母公司SLF4J記錄,但對於相同的,Maven依賴於日食,因此產生的,我不能在代碼中使用日誌記錄。任何人都可以讓我知道這裏有什麼問題。

回答

1

在父pom中使用<dependencyManagement>允許通過子模塊設置可用的依賴關係。
這是一件好事,因爲它集中了它們並指定了一個且只有一個版本。
但要使用它們,子模塊必須在<build>標記的<dependencies>標記中聲明它們。

例如,您可以修改子POM這樣:

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

如果您認爲這些依賴關係應該在所有子模塊的加入,有利於dependencies在父POM聲明dependencyManagement

<dependencies> 
...  
    <dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>${slf4j.version}</version> 
    </dependency> 
    <dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-classic</artifactId> 
    <version>${logback.version}</version> 
    </dependency> 
    <dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-core</artifactId> 
    <version>${logback.version}</version> 
    </dependency> 
... 
</dependencies> 

現在,您不需要在子模塊中聲明這些中的任何一個,因爲這些依賴項已經包含在內。

相關問題