2017-06-29 17 views
0

my mavenプロジェクトには複数のMavenモジュールがあります。これらのモジュールの2つ(製品と機能)は互いに依存しています。 pomファイルに依存関係としてモジュールを含めると、!マークがモジュールに表示されます。実行中のmaven installでこのエラーが発生します。Mavenの循環依存性

The projects in the reactor contain a cyclic reference: Edge between 
'Vertex{label='com.catalog:feature:0.0.1-SNAPSHOT'}' and 
'Vertex{label='com.catalog:product:0.0.1-SNAPSHOT'}' introduces to 
cycle in the graph com.catalog:product:0.0.1-SNAPSHOT --> 
com.catalog:feature:0.0.1-SNAPSHOT --> com.catalog:product:0.0.1- 
SNAPSHOT @ 

依存関係を追加しないFeatureモジュールで定義された関数にアクセスできず、その逆もありません。

親の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>com.catalog</groupId> 
    <artifactId>catalog</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.5.2.RELEASE</version> 
    </parent> 

    <dependencies> 

     <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.1-api</artifactId> 
      <version>1.0.0.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.osgi</groupId> 
      <artifactId>org.osgi.core</artifactId> 
      <version>4.3.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.osgi</groupId> 
      <artifactId>org.osgi.enterprise</artifactId> 
      <version>4.2.0</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>5.0.0.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>5.4.1.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>javassist</groupId> 
      <artifactId>javassist</artifactId> 
      <version>3.12.1.GA</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.jayway.jsonpath</groupId> 
      <artifactId>json-path</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>6.0.6</version> 
     </dependency> 

    </dependencies> 

    <modules> 
     <module>category</module> 
     <module>resource</module> 
     <module>hibernate</module> 
     <module>product</module> 
     <module>helper</module> 
     <module>feature</module> 
    </modules> 

製品モジュールのpom.xml

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

    <artifactId>product</artifactId> 

    <name>product</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 

     <dependency> 
      <groupId>com.catalog</groupId> 
      <artifactId>hibernate</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 

     <dependency> 
      <groupId>com.catalog</groupId> 
      <artifactId>category</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 

     <dependency> 
      <groupId>com.catalog</groupId> 
      <artifactId>helper</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 

     <dependency> 
      <groupId>com.catalog</groupId> 
      <artifactId>feature</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 

    </dependencies> 

</project> 

機能モジュールのpom.xml

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

    <groupId>com.catalog</groupId> 
    <artifactId>feature</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>feature</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 

     <dependency> 
      <groupId>com.catalog</groupId> 
      <artifactId>hibernate</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 

     <dependency> 
      <groupId>com.catalog</groupId> 
      <artifactId>product</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 

    </dependencies> 

</project> 
+0

以前は 'Feature'をビルドして' Product'をビルドする必要がありました。以前は 'Product'をビルドするには' Feature'をビルドする必要があります。そこにサイクリック依存関係を植えていますか?これらのモジュールをリファクタリングして、単一のモジュールを作成するか、独立した第3のモジュールに依存コードを抽出する必要があります – Pelocho

+1

悪い設計の結果!ユーティリティモジュールを作成し、他のモジュールへの依存関係を追加します。 – z21

+0

@ z21どちらのモジュールも独自の休止状態のエンティティクラスを持っています。製品と機能は互いのエンティティにアクセスする必要があります。私はすべてのエンティティを別々のモジュールに入れることを提案していますか?別の方法として、製品とフィーチャーをビルドモジュールとしてではなく同じプロジェクトにパッケージとして作成すると、それはより優れた設計になりますか? – Sid

答えて

2

Design smell.

モジュールをリファクタリングします。基本的には、両方のモジュールで必要とされるすべてが共通の依存関係になるはずです。あなたはあなたの依存関係ツリーにサイクルを持つことはできません、それは動作しません。