2017-12-21 7 views
0

나는 다시 다른 종속성을 끌어해야 내 웹 응용 프로그램의 POM에 다음 받는다는 종속성이 있습니다Maven은 - 스냅 샷 종속성을 처리

<dependency> 
    <groupId>com.my.libraries</groupId> 
    <artifactId>my-libs</artifactId> 
    <type>pom</type> 
    <version>1.6-SNAPSHOT</version> 
</dependency> 

참고 내가 이전에 이전하는 동안 뽑아 my-libs 유물 1.5을 출시했다에게 짓다. 그러나 나중에 버전을 1.6-SNAPSHOT으로 업그레이드했습니다. mathlibrary1.5 릴리스에 아티팩트가 존재하지 않습니다.

나는 1.5 존재하지 않았다 1.6-SNAPSHOT verson my-libs 유물의 일부로서 존재하는 일부 항아리를 기대하고 - POM을은 다음과 같습니다 :

<!-- all the usual POM descriptionsm for my-libs --> 

<groupId>com.my.libraries</groupId> 
<artifactId>my-libs</artifactId> 
<version>1.6-SNAPSHOT</version> 
<packaging>pom</packaging> 

<!-- continues... all normal stuff, nothing to see here :'/ --> 
     <dependency> 
      <groupId>com.my</groupId> 
      <artifactId>mathlibrary</artifactId> 
      <version>1.0</version> 
     </dependency> 
<!-- continues --> 

나는 내가 할 경우 mathlibrary 항아리가 당겨질 것으로 예상 내 프로젝트에 mvn package. 하지만 내 웹 응용 프로그램에 대한 lib 폴더를 보면 jar 파일이 없습니다. 그런 다음 내 .m2 디렉토리 내용을 확인 했으므로 1.5 버전 만 존재하므로 1.6- 스냅 샷이 자동으로 설치되지 않았습니다. 여기에서 릴리스 버전을 이전에 가져온 경우 다음 SNAPSHOT을 가져 오지 않을 것이라고 생각합니다.

mvn clean install을 사용하여 수동으로 my-libs 이슈를 설치 한 후 다음 웹 응용 프로그램의 빌드에서 jar를 올바르게 풀었습니다. 즉, package 단계가 SNAPSHOT 종속성을 자동으로 끌어 오지 않도록 정의되어 있습니까? 또는 예상되는 무언가입니까 (예 : 릴리스 버전이 아닌 경우 수동으로 install 단계 실행해야 함)?

답변

-2

mvn을 설치할 때 Maven은 리포지토리 (글로벌 또는 로컬)로만 들어가는 중입니다. Maven Install을 통해 Maven은 모든 POM 라이브러리가 프로젝트에 존재하는지 확인하고 일부 POM 라이브러리가 누락되어있는 경우 리포지토리에서 프로젝트로 다운로드합니다. Maven 패키지를 수행하면 프로젝트에있는 라이브러리 만 패키지됩니다.

+0

그래서 내가 깨끗한 컴파일 패키지를하면 repo에서 다운로드해야합니까? – ha9u63ar

+1

Maven은'mvn package'를 사용하더라도 의존성을 다운로드하지만 빌드 결과를 로컬 저장소에 저장하지 않습니다. –

1

mvn package을 사용하면 로컬 저장소에서 모든 SNAPSHOT 종속성을 가져옵니다 (또한 이슈가 원격 일 경우 24 시간마다 원격 저장소에서 로컬 저장소로 업데이트됩니다).

난 정말 당신이 (체크인에 배포/설치 CI 서버 제외) 아티팩트를 설치할 자동 방법이 없기 때문에 "수동으로my-libs 설치"무슨 뜻인지 이해가 안 돼요. my-libs와 같은 이슈를 사용하려면 빌드하고 로컬 저장소에 저장해야하며 mvn install을 사용하면됩니다.

+0

우리의 응용 프로그램 프로젝트에서'my-libs '에 대한 종속성을 추가하면'my-libs'에 의존성으로 추가 된 이후'mathlibrary'가 자동으로 다운로드된다는 것을 의미했습니다. 하지만'mvn 패키지 '단계를 실행했을 때는 발생하지 않았습니다. 웹 어플리케이션을위한 깨끗한 패키지를 만들고있을 때 이것을 꼭 사용해야한다면 어떻게해야합니까? – ha9u63ar

+0

my-libs와 my-libs에 대한 의존성이 mathlibrary에 달려있는 경우 mathlibrary도 그려집니다. 이것을 확인하기 위해'dependency : tree'를보십시오. 모든 종속성이''에 있고' '에 _not_가없고 모든 버전이 올바른지 확인하십시오. –

+0

'my-libs'에 대한 이전 릴리스 정보로 질문을 업데이트했습니다. 아마 내 혼란이 너에게 더 이해 될 것이다. – ha9u63ar

0

귀하의 질문에 대한 답변은 pom.xml에서 어떤 packaging을 사용하고 packge 단계에 맞게 실행 된 플러그인을 사용하는지에 따라 다릅니다. 의존성이 처리 될 때, Maven은 보통 그것을 해결한다. 이것은 해당 jar 파일이 로컬 저장소에 있음을 의미한다. target 폴더의 jar 파일을 가져 오는 것은 (또는 압축을 푼 것처럼) 일부 플러그인 작업의 결과입니다 (이러한 플러그인은 mojo를 prepare-package 또는 package 단계 (일반적으로) 실행합니다.) (예 : war) 또는 예를 들어 "assembly"플러그인 (의존성을 재 패키징 할 수 있음) 종속성 인위 유무를 해결하고 나중에 사용할 수있게하려면 원격 저장소에 deploy 또는 로컬 저장소에 install 중 하나를 사용해야합니다.

1) 내 .m2 디렉토리에서 모든 릴리스/스냅 샷 제거 :

+0

내 질문이 업데이트되었습니다. 아마도 혼란이 당신에게 더 의미가있을 것입니다 ? – ha9u63ar

+0

'pom' 패키징은 의존성이 없습니다 (패키징, 라이프 사이클 단계 및 플러그인 간의 매핑에 대해서는 https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html을 참조하십시오). 그래서, 귀하의 질문에서 나는 결론을 내릴 수 있습니다. 그 대답은 "아니오, 패키지 단계가 자동으로 의존성을 끌어 내지 않습니다"입니다. 그러나'build' 섹션의 pom 파일에는'package' 단계에 맞게 실행 된 "dependency"플러그인과 같은 것이 있습니다. – scrutari

+0

@scrutari 이것은 잘못되었습니다. pom 유형 종속성을 참조 할 수 있으며 pom의 내용은 전 이적 종속성이됩니다. –

0

이에 @JFMeier 대답을 읽은 후, 나는 다음과 같은했다.

2) my-libs

3) 빌드를 시작했다위한 1.5 릴리스를 사용하여 내 웹 응용 프로그램 POM 변경. 빌드가 완료되면

4), 나는 mylibraries 항아리가

5) 반복 2-4 단계 lib에는 바람둥이의 WEB-INF \ 내 마지막 웹 응용 프로그램 디렉토리에 배치되지 않았 음을 확인 -하지만 버전을 변경 my-libs에 대해서는 1.6-SNAPSHOT입니다.

6) 이제 예상 결과를 볼 수 있습니다.

+0

잘 작동하는 것이 좋습니다. –