2013-06-22 4 views
5

문제 :연습 바로 이클립스 SVN 체크 아웃 후 빌드

프로젝트가 SVN에 체크인하고, 다른 사람이 검사를 벗어

, 거기에 느낌표가 빌드 경로 오류가 있어야합니다 해결됨. 그것을 고치는 방법?

는 예를 들어, 내가 프로젝트를 가지고 다음은이 구조의 :

이 libs와 폴더에 3 개 도서관이 있습니다

* android-support-v4.jar 
* bugsense3.2.2.jar 
* gcm.jar 

안드로이드 종속성 폴더가 있습니다

* annotations.jar 

을 참조 된을 라이브러리의 유형 :

* gcm.jar 
,

안드로이드 개인 라이브러리가 있습니다

* bugsense3.2.2.jar 
* gcm.jar 
* android-support-v4.jar 

구글 API를 [안드로이드 2.2]이 있습니다 그래서 우리가 자동으로 안드로이드 개인 라이브러리에 추가됩니다 libs와 폴더에 배치 무엇처럼 보인다

* android.jar 
* maps.jar 

을, 정확하니? 그래서 그들은 SVN에 체크인 할 수 있고 누군가 다른 사람이 체크 아웃하고 빌드 할 때 Android 개인 라이브러리의 .jar 파일은 로컬 작업 공간을 가리키고 있으므로 문제가되지 않습니다.

그러나 Android 종속성의 annotations.jar 및 Google API의 android.jar 및 maps.jar은 내 C :의 android-sdk 폴더를 참조합니다. 따라서 누군가 다른 사람이 내 전체 프로젝트를 체크 아웃하면 Java 빌드 경로를 통해 해결해야하는 빌드 문제가 발생합니다.

새 라이브러리가 들어 와서 프로젝트를 체크 아웃 할 때 SVN에 모든 라이브러리를 저장하는 표준 사례는 무엇입니까? 나는 우리가 빌드 관리 시스템, 지속적인 통합, 서버 구축 등을 할 수있는 영역에 있다고 생각한다. 그래서 나는 그것을 약간 알고 있지만 충분히 큰 팀에서 일한 적은 한 번도 실제로 사용하지 않았다. . 만약 누군가가 정말 내게 정확히 (Maven, Gradle과 같은 실제 도구들) 사용하는 것을 친절하게한다면, 그것은 매우 감사 할 것입니다!

는 ADK는 클래스 패스에 추가하는 라이브러리에 대한 특별한 아무것도 없다,

-V

+0

로컬 파일 시스템의 Maven 저장소에 개인 항아리를 "배포"하고이를 SVN으로 확인할 수 있습니다. 참조 : http://stackoverflow.com/a/12980000/7507 – noahlz

+0

나는 실제로 당신이 의미하는 것이 확실하지 않습니다. 내 질문에, 빌드 프로세스에 대한 나의 이해가 약하다. 결과적으로, 나는 누군가가 무엇을해야하는지, 어떤 도구를 사용해야하는지 정확하게 설명하기를 희망합니다. 큰 팀, CI의 세계에 노출되지 않은 많은 소프트웨어 엔지니어가 프로세스 등을 구축하는 것이 매우 유용하다는 느낌이 들었습니다. – vkinra

+0

git, github 및 Travis-CI를 사용하여이 방법을 직접 사용할 수도 있습니다. 큰 팀은 아무 관계가 없습니다. – noahlz

답변

5

주셔서 감사합니다. 프로젝트의 모든 종속성을 체크인 할 수 있도록하려면 참조 된 jar를 로컬 디렉토리에 복사 한 다음 제공된 라이브러리 그룹을 사용하는 대신 클래스 경로를 가리 키십시오. 안드로이드 플러그인에는 경로와 apk에 libs 디렉토리에 물건을 자동으로 추가하는 새로운 엉뚱한 시스템이 있기 때문에이 다른 항아리를 넣는 것을 권장하지 않습니다. 일반적으로 우리가 여기에서 할 일은 svn에 제 3 자 또는 이와 비슷한 이름의 별도의 폴더를 만든 다음 을 사용하여 필요한 jar를 참조하는 것입니다. 써드 파티 jar를 저장하는 하나의 공통된 장소가 있으면 버전 및 구성 관리가 쉬워집니다.

더 명확 것들을 조금 설명하기 위해이 예제 Subversion 저장소은 다음과 같은 형태가 될 것이다 수동으로 경로를 타사에 물건을 추가, 실제 이클립스 프로젝트에서

repo 
    -android_project 
     -trunk 
      -your other project stuff (src, etc) 
      -libs 
       -android-support-v4.jar 
       -bugsense3.2.2.jar 
       -gcm.jar 
      -third-party 
       -annotations.jar (external) 
       -android.jar (external) 
       -maps.jar (external) 
third-party 
    -android 
     -v_X.XX 
      -annotations.jar 
      -android.jar 
      -maps.jar 

, adk가 libs에있는 내용을 자동으로 경로에 추가합니다.

메이븐 대이 방법의 주제에

편집, 나는 인정한다 제일 먼저 내가 메이븐 경험의 엄청난 금액을하지 않아도됩니다. 내가 그것에 대해 알고있는 바에 따르면, 나는 그것이 당신의 기준에 맞지 않는다고 생각합니다. Maven을 사용할 때, 기본적으로 의존성은 작업 공간이 아닌 기계 고유의 위치로 다운로드됩니다. Eclipse가 이러한 종속성을 선택하게하려면 모든 경로를 제대로 해결할 수 있도록 작업 공간에 M2_HOME 특성을 추가해야합니다. 프로세스를 자동화하는 mvn 명령이 있었기 때문에이 모든 것을 설정할 수 있었지만 시스템에 익숙하지 않은 사용자에게는 새로운 개발자가 프로젝트를 시작할 때 혼란과 느린 작업을 유발할 수있었습니다. 또한 중요한 문제는 연결되지 않은 영역에서 작업하는 것을 매우 어렵게하는 일종의 중앙 저장소에 의존성을 저장해야한다는 것입니다.

다시 말하지만, 저는 Maven의 전문가가 아닙니다. 소금 한알로 말했던 것을 취해야합니다. 그러나 제 경험에서 Maven은 연결성이 환영 받고 거의 보장 될 수있는 오픈 소스 환경에서 훌륭하게 작동합니다. 닫힌 소스 환경. 그것은 우리를 위해 해결 된 것보다 더 많은 문제를 일으킨 것처럼 보였으므로 결코 잡히지 않았습니다. 위에서 설명한 시스템에 대한 좋은 점은 체크 아웃 후에 프로젝트를 개발하고 빌드하는 데 필요한 모든 것을 포함하는 단일 폴더 (일식 제외)입니다. 따라서 새 시스템이나 낯선 환경에서 일을 시작하고 실행하기가 쉽습니다.

Maven에서 제공하는 큰 이점은 일관성입니다. 필자가 설명한 시스템을 사용하여 개발자는 프로젝트를 설정하는 모든 측면을 담당합니다. 이것은 개발자와 프로젝트 사이에서 svn 저장소가 레이아웃 된 방식을 변형시킬 수 있음을 의미합니다. 한 개발자는 디렉토리를 "제 3 자"라고 이름을 붙일 수 있으며, 다른 개발자는 "오픈 소스"라고 부를 수도 있고 일부 개발자는 프로젝트에서 트렁크를 사용하지 않을 수도 있습니다. 시간이 지남에 따라 이러한 작은 것들이 축적되어 저장소를 혼란스럽게 할 수 있습니다. Maven은 프로젝트의 레이아웃을 담당하므로 저장소가 일관성을 유지할 수 있습니다.

+0

질문 : Maven을 사용하여 프로젝트의 종속성을 관리 할 수 ​​있다는 인상하에있었습니다. 나는 그것을 위해 maven eclipse plugin을 사용해야 만한다는 것을 계속 듣는다. 내가 업계 최고의 실무를 찾고 있다고 말했듯이 그 경험이 있습니까? 어쨌든, 나는 당신의 제안을 시험해보고 대답이없고 당신의 방법이 깨끗하면 즉시 받아 들일 것입니다. – vkinra

+0

@vkinra 귀하의 의견에 대한 제 응답은 약간 오래되었습니다. 그래서 다른 의견을 추가하는 대신 내 대답을 편집했습니다. – TwentyMiles

+0

나는 오랫동안 끈질 기게 대답 해 주시고 답변을 수락하겠습니다. 그러나 누구나이를 개선 할 수 있으면 추가하십시오. TwentyMiles, 고마워. – vkinra