2012-01-13 3 views
0

우리는 사내 프레임 워크 프로젝트 중 하나를 개미에서 maven으로 변환했습니다. Maven 빌드는 정상적으로 실행되며 문제없이 저장소에 배포됩니다.maven 프레임 워크 최상위 레벨의 설정 방법

문제는 다른 프로젝트가 프레임 워크를 소비하려고 시도 할 때 작동하지 않는다는 것입니다. 다운로드 된 유일한 것은 최상위 프레임 워크입니다.

하나 이상의 다양한 모듈에 종속성 항목을 추가하려고했지만 어떤 항목을 추가해도 순환 종속성 오류가 발생합니다. 나는 또한 저장소 관리자에있는 파일을 덮어 쓰기 위해 모듈과 몇 가지 의존성이없는 두 번째 최상위 수준의 pom 파일을 만들려고했다. 이로 인해 종속성 중 일부가 다운로드되지만, Maven 빌드는 임의의 위치에 정지합니다. Windows 작업 관리자를 기반으로, 그것은 마치 무한 루프에서와 같습니다. 그래서 두 번째 pom 파일이 대답이 아닌 것으로 보입니다. 최고 수준의 POM

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>framework_snt</groupId> 
    <artifactId>SFP</artifactId> 
    <packaging>pom</packaging> 
    <name>SFP framework</name> 
    <version>6.3</version> 

    <modules> 
.... 50+ modules here 
    </modules> 

후 일반적인 특성, 의존성 관리와 pluginManagement 항목 :

내 프레임 워크 치어 파일은 다음과 같이 보입니다. 소비 모듈

난 그냥 다음과 같습니다

<dependency> 
    <groupId>framework_snt</groupId> 
    <artifactId>SFP</artifactId> 
    <version>6.3</version> 
    <type>pom</type> 
</dependency> 

이 최상위 POM에 그렇게 모든 서브 모듈은 개발자에 쉽게 만들 수있는 프레임 워크 라이브러리에 액세스 할 수 있습니다.

소비 프로젝트별로 모든 종속 jar 파일을 다운로드하려면 어떻게 설정해야합니까?

답변

2

프레임 워크 프로젝트에서 각 자식 모듈에 하나씩 여러 개의 jar 아티팩트가 생성되지만 부모 프로젝트에는 jar 아티팩트가없는 것처럼 들립니다. 따라서 부모 프로젝트의 pom에 종속성을 선언하는 것은 원하는 작업이 아닙니다. 대신 프레임 워크 프로젝트의 하위 모듈 각각에 대한 의존성을 선언해야합니다.

저는 여러 모듈 (각각 jar 아티팩트를 생성하는)이있는 "툴킷"프로젝트가있는 비슷한 설정을 가지고 있습니다. 그런 다음 다른 프로젝트에서 필자는 사용해야하는 모듈에 의존성을 선언합니다. 그러나 필자는 "툴킷"부모 프로젝트 pom 파일에 대한 의존성을 선언하지 않습니다. 대신 나는 자식 모듈 jar 생성물에 대한 의존성을 선언합니다. 당신처럼 내 아이 모듈의 중 하나에 내 의존성 선언 포인트가 <type>pom</type>를 선언하지 않는

<dependency> 
    <groupId>com.mycompany.toolkits</groupId> 
    <artifactId>file-utils</artifactId> 
    <version>1.0.0</version> 
</dependency> 

알 수 있습니다. 정말로 명시하고 싶다면 <type>jar</type>을 대신 선언 할 수 있습니다.

+0

네, 이것은 일을 성취하는 한 가지 방법 일 것입니다. 그러나 우리가 기존의 앤트 빌드를 변환하는 것처럼, 모든 사람들은 "프레임 워크"를 포함하고 50 개의 모든 jar 파일을 항상 사용할 수있게하는 데 익숙합니다. – Jon

+0

나는 자식 모듈 ("framework-all"또는 무엇이라고 불리는)이 다른 모든 자식 모듈에 대한 의존성을 선언하도록 시도 할 수있다. 그런 다음 개발자는이 자식 모듈에 대한 의존성을 선언 할 수 있어야하며, maven은 다른 종속성을 다른 종속성으로 가져옵니다. – BenjaminLinus

+0

나는 이것에 변이를 사용하여 끝냈다. 나는 최상위 레벨 어 그리 게이터 pom을 구축 및 배치에 사용하도록 유지했습니다. GAV는 응용 프로그램에서 사용하는 것과 동일하지 않습니다. 그런 다음 새 폴더에 새 폴더를 만들었습니다. 여기에는 응용 프로그램에 대한 "올바른"GAV가 포함되며 모듈은없고 종속성 만 있습니다. 지금까지이 작품 – Jon

-1

전화 할 때 framework pom은 다중 모듈 프로젝트의 parent입니다.

모듈은 서로 의존 할 수 있지만이 부모 모듈에는 의존 할 수 없습니다. 이것은 아마도 순환 종속성을 야기 할 수 있습니다.

모듈을 다시보고 종속성을 적절하게 지정하고 어떤 모듈이 종속되어 있는지 식별해야합니다. 또한 이러한 종속성은 일반적으로 jar 종속성 - 소스 및 자원을 포함하는 패키징입니다.

Maven By Example은 추가 정보를 제공하는 많은 리소스 중 하나입니다.

+0

정말 도움이되지 않지만 시험해 주셔서 감사합니다. 다른 프로젝트가 프레임 워크와 모든 종속 jar 파일을 사용하는 방법이 필요합니다. – Jon

+0

@ 존 당신은 와일드 카드 방식을 찾고있는 것 같습니다. 패키징 유형에 종속성을 pom으로 포함 할 수 없습니다. –

+0

@Keerthi - 사실 내가 의존성으로 pom을 가질 수 있으며 제 3 자 라이브러리의 다중 모듈 프로젝트에 광범위하게 사용합니다. 그렇다면 소비 프로젝트에는 1 항목 만 있으므로 소비자 pom 파일을 훨씬 더 깨끗하게 만듭니다. 그러나이 경우 jar 파일을 빌드하는 경우 동일한 접근 방식이 작동하지 않습니다. – Jon