Search Results for 'Exclusion'

1 POSTS

  1. 2013.02.04 Maven Missing Artifact 오류발생 원인 1

요즘엔 대부분 프로젝트에서 Maven을 사용한 라이브러리(jar 파일)를 관리합니다.

하지만 오래된 프로젝트나 버전이 지원되지 않는 라이브러리의 경우 때문에 프로젝트 빌드도 안되는 문제가 발생하지요. 에고고...

특히 OS 재설치후 이클리스를 새로 설치하거나 했다면 repository 위치에는 기존에 다운받아놓은 jar가 하나도 없을것이기 때문에 이러한 오류가 발생할 확률은 더더욱 높습니다. 특히 윈도우 사용하시는 분들은 적어도 1년에 한번은 PC를 포맷하잖아요.^^


이런경우 대부분 로컬 maven repository가 비었기 때문에 모든 jar를 새롭게 다운받으려고 하는데, 원격 저장소에서 해당 jar를 지원하지 않는 경우가 있거나 하면 오류날 확률은 더더욱 커집니다. (이젠 네트웍이 안되면 개발도 못하는 세상입니다.)

그럼 직접 jar를 구해서 해야 할까요?


Maven의 많은 장점 중 하나는 의존관계에 있는 jar를 알아서 다운받아 주는 것이지요.

하지만 이는 또다른 쓸데없는 jar를 함께 다운받음으로 사용하지도 않는 jar를 함께 배포해야 하는 문제도 야기시킵니다. 특히 꼼꼼하지 못하거나 게으른 개발자는 다 포함시켜서 배포합니다. 

이클립스 프로젝트의 jar 목록을 보면 확실히 예전 maven을 사용하기전보다 많은 jar가 존재하는걸 볼수 있습니다.


지난주에 오픈프레임워크에서 프로젝트 하나를 다운받아 로컬에서 실행시켜 보려고 했었습니다. 파일다운로드 관련...

물론 pom.xml 에 의해 관련 jar를 다운받는데, 대부분이 missing으로 나오더군요. 거의 99%이상이...


여러개의 삽질을 시도하다가 지정된 repositories 부분을 전부 삭제해버렸습니다.

그랬더니 80% 정도의 jar가 다운받아지더군요. 

repositories 를 일일이 지정하는 경우는 아마도 프로젝트 특성에 따라 뭔가를 제한하거나 별도의 jar를 만들어서 재 배포할때 사용하는 경우가 아닌가 생각됩니다. 일반적인 경우라면 없어도 상관이 없을듯 합니다.


그래도 여전히 남아 있는 missing ....

이후부터 몇개는 관련 artifactId, artifactId를 검색하면서 변경했습니다. 이클립스 pom.xml dependencies 에서 검색하면서...

http://www.mvnrepository.com/ 사이트에서도 검색이 가능하네요.


버전 맞지 않는 부분 변경완료하니 대략 95%쯤 완료된듯 합니다..

이렇게 해서 마지막으로 받지 못한 남은 jar가 3개.


아무리 봐도 jms, jmxtools, jmxri 관련 jar를 요청하는 부분은 없는데, build path Libraries 의 Maven dependency에는 관련 jar를 다운받지 못해 (missing)이라고 표시합니다.


어찌어찌하여 검색한 log4j 의 의존성 관련 jar 목록입니다.

This artifact depends on ...

GroupArtifactVersion
com.sun.jdmkjmxtools1.2.1
com.sun.jmxjmxri1.2.1
javax.jmsjms1.1
javax.mailmail1.4
junitjunit3.8.1
orooro2.0.8


 jms, jmx, jmxri 등의 jar 파일을 요청하는 녀석은 log4j 였던 것이지요.


왜 해당 jar 를 다운받지 못한것인지는 알수 없으나 아마도 Sun 이 Oracle로 인수되면서 몇몇 패키지에 대한 지원이 더이상 안되는게 아닌가 의심(?) 을 해봅니다. (지극히 개인적인 의견임) 이전 글에도 나와있지만 이제 Sun이 오라클에 인수되면서 오라클의 영역권에 놓이게 된 자바는 더이상 예전의 자바가 아닌듯 합니다.


Anywhere... log4j 에서 다운받지 못하는 관련 jar를 제외시켜버렸습니다. 요렇게요...


<Before>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.15</version>

</dependency>


<After>

             <dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.15</version>

<exclusions>

<exclusion>

<groupId>com.sun.jmx</groupId>

<artifactId>jmxri</artifactId>

</exclusion>

<exclusion>

<groupId>com.sun.jdmk</groupId>

<artifactId>jmxtools</artifactId>

</exclusion>

<exclusion>

<groupId>javax.jms</groupId>

<artifactId>jms</artifactId>

</exclusion>

</exclusions>

</dependency>


그제서야 더이상 jmx, jmx, jmxri 등의 jar를 찾지 않게 되는군요.


Maven 을 사용할때 주의해야 할것은 필요없는 jar는 위와 같이  exclude 시키는 것이 여러모로 좋을 것입니다. 이유야 뭐...


이제 앞으로는 " http://www.mvnrepository.com/ " 이 사이트를 좀더 자주 방문하게 될것 같습니다.


Maven 을 좀더 알고 써야겠습니다. 다른것도 마찬가지지만...