2016-11-08 84 views
0

我想使用maven多模塊來分離我的項目,所以我開始做一個公共的依賴項。依賴項沒有從父項目繼承

但是當我嘗試使用父項目中定義的依賴封裝成子模塊Maven項目import org.springframework.transaction.annotation.Transactional;

的Eclipe說The import org.springframework cannot be resolved

家長pom.xml

<?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>ao.parent</groupId> 
    <artifactId>ao-parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <modules> 
    <module>ao-commons</module> 
    </modules> 

    <dependencies> 

     <!-- Spring --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>4.0.5.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>4.0.5.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>4.0.5.RELEASE</version> 
     </dependency> 


     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>4.0.5.RELEASE</version> 
     </dependency> 

    </dependencies> 

</project> 

兒童pom.xml

<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> 

    <parent> 
    <groupId>ao.parent</groupId> 
    <artifactId>ao-parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    </parent> 

    <artifactId>ao-commons</artifactId> 

    <packaging>jar</packaging> 

</project> 
+0

您是如何構建項目的?從父母和命令行?在IDE中? – Tunaki

+0

@Tunaki我沒有建立任何東西,但我只是遵循YouTube的tuto ...我沒有運行任何東西 – Youssef

+0

如果你沒有運行任何東西,你怎麼會有錯誤? – Tunaki

回答

0

你必須在這裏做2件事。

首先,在您的父pom中,添加<dependencyManagement>標記中的所有依賴關係。這將確保依賴關係可供孩子使用。所以現在這就是你父母的外表。

<?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>ao.parent</groupId> 
    <artifactId>ao-parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <modules> 
    <module>ao-commons</module> 
    </modules> 

    <dependencyManagement> 
    <dependencies> 
     <!-- Spring --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>4.0.5.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>4.0.5.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>4.0.5.RELEASE</version> 
     </dependency> 


     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>4.0.5.RELEASE</version> 
     </dependency> 
    <dependencies> 
    </dependencyManagement> 

</project> 

其次,你的孩子POM,你將不得不通過只指定groupIdartifactId明確包括的依賴關係。由於該版本將由父pom處理。所以現在你的孩子會看起來像這樣。

<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> 

    <parent> 
    <groupId>ao.parent</groupId> 
    <artifactId>ao-parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    </parent> 

    <artifactId>ao-commons</artifactId> 

    <packaging>jar</packaging> 


    <dependencies> 
    <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
     </dependency> 
    </dependencies> 
</project> 

,你將不得不把它之所以這樣是因爲當你有一個父POM和一個或多個子POM的多模塊項目的依賴的版本將與父POM和被處理子pom將簡單地繼承它。另外,當你在父pom中包含任何依賴時,maven會簡單地理解這些依賴關係可供孩子使用。但是,如果孩子必須使用這些依賴關係中的任何一個,那麼孩子必須使用groupIdartifactId來明確指定依賴關係。