2013-09-06 4 views
2

I가 다음과 같은 구조 :공유 종속성

main/ 
    --pom.xml 
    --common/ 
     --pom.xml 
    --core/ 
     --pom.xml 

모두 일반적이고 코어는 주요 프로젝트의 모듈, 그래서 주/pom.xml 파일은 다음과 같이이다 :

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>main</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>Main APP</name> 
    <url>http://maven.apache.org</url> 
    <modules> 
     <module>common</module> 
     <module>core</module> 
    </modules> 
</project> 

게다가 즉, common/pom.xml은 앞으로의 모든 모듈들 사이에 공통적 인 의존성을 가지고 있다고 가정합니다. 이/pom.xml 파일이 지금과 같은 방법 일반적입니다 : 마지막으로

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>common</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>mod1</name> 
    <url>http://maven.apache.org</url> 


    <parent> 
     <groupId>com.mycompany.app</groupId> 
     <artifactId>main</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 

    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>common-dependency</groupId> 
       <artifactId>common</artifactId> 
       <version>3.8.1</version> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 
</project> 

, 모듈 공통 모듈에 정의 된 종속성을 사용해야 핵심, 그래서 이것은 내가 코어/pom.xml 파일에서 수행 무엇 :

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>core</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>Core</name> 
    <url>http://maven.apache.org</url> 

    <parent> 
     <groupId>com.mycompany.app</groupId> 
     <artifactId>main</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 

    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>com.mycompany.app</groupId> 
       <artifactId>common</artifactId> 
       <version>1.0-SNAPSHOT</version> 
       <scope>import</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

</project> 

제가 원했던 것은 mvn dependency:copy-dependencies을 코어 모듈 내부에서 실행할 때, maven은 공통 모듈에서 모든 의존성을 복사해야한다는 것입니다 (예 : common-dependency : common). 그러나 실제로 어떤 일이 발생하는지는 의존성을 복사하지 않는다는 것입니다. 따라서 핵심 모듈이 전혀 의존성을 가지지 않은 것처럼 보입니다.

무엇이 여기에 있습니까?

답변

1

범위 'import'는 dependencyManagement를위한 것으로 실제 모듈을 사용할 때 모듈의 버전과 기본 범위 만 제공합니다.

종속성을 얻으려면 dependencyManagement에서 줄 바꿈하지 않고 전 이적 종속성 메커니즘 만 사용하면됩니다.

그래서 일반/pom.xml 파일은

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>common</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>mod1</name> 
    <url>http://maven.apache.org</url> 


    <parent> 
     <groupId>com.mycompany.app</groupId> 
     <artifactId>main</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 

     <dependencies> 
      <dependency> 
       <groupId>common-dependency</groupId> 
       <artifactId>common</artifactId> 
       <version>3.8.1</version> 
      </dependency> 
     </dependencies> 
</project> 

해야하며, 코어/pom.xml 파일은

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>core</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>Core</name> 
    <url>http://maven.apache.org</url> 

    <parent> 
     <groupId>com.mycompany.app</groupId> 
     <artifactId>main</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 

     <dependencies> 
      <dependency> 
       <groupId>com.mycompany.app</groupId> 
       <artifactId>common</artifactId> 
       <version>1.0-SNAPSHOT</version> 
      </dependency> 
     </dependencies> 

</project> 
+0

나는 핵심 모듈 I에서'MVN의 package'를 실행할 때 내가 작동하지 않았다해야한다 '... 이물을 찾을 수 없습니다 com.mycompany.app : common : jar ... ' –

+0

먼저 공용 항아리에'mvn install '을해야합니다. 또는 상위 폴더에 'mvn install'을 수행하면 maven이 올바른 순서를 찾습니다. 'mvn 패키지'는 로컬 모듈의 대상 디렉토리에 jar 파일을 빌드하기 만하면 mvn install을 사용하여 로컬 저장소에 저장해야하므로 형제 모듈을 포함한 다른 모듈에서 사용할 수 있습니다. – greyfairer