오픈 소스 프로젝트에서 외부 종속성을 어떻게 처리합니까?


23

오픈 소스 프로젝트를 작성하고 Google Code 또는 GitHub를 사용하고 Lua와 같은 라이브러리를 사용하려는 경우 어떻게해야합니까?

  • 저장소에 종속성이 포함되어야합니까?
  • 종속성을 나머지 프로젝트와 동일한 빌드 스크립트 또는 별도의 빌드 스크립트에서 빌드해야합니까?

컴파일하기 전에 라이브러리를 설치할 필요가 없다고 가정합니다.

답변:


10

하위 모듈에 대한 Git의 문서를 읽는 것이 좋습니다 . 모든 소스가 Git을 사용한다고 가정하면이 문제를 해결합니다. 그렇지 않은 경우 통합을 위해 항상 git repo를 설정할 수 있습니다. 노력은 사소한 것이며 그 결과는 중요합니다.


1
하위 모듈은 공통 및 Git에서 종속성 관리의 구현이 다소 약합니다. 적어도 자식 서브 트리는 훨씬 더 나은 반복입니다
Lazy Badger

4
-1 답변에 링크의 세부 사항을 포함하십시오. 그렇지 않으면 링크가 사라지면 답변이 쓸모가 없습니다. 불행히도, 난 아직 downvote에 대한 담당자가 없습니다
Precastic

@Precastic : 링크 텍스트를 Google에 연결하면 새 페이지로 바로 이동합니다. 그것이 얼마나 유익한 지 잘 모르겠습니다.
Bryan Agee 2

1
읽어 보시기 바랍니다 stackoverflow.com/help/how-to-answer을 - 특히 섹션은 '링크에 대한 컨텍스트를 제공합니다 "(인용 :"항상 대상 사이트에 연결할 수 또는 영구적으로 오프라인이 경우, 중요한 링크의 대부분의 관련 부분을 인용 . ")
Precastic

17

저장소에 종속성이 포함되어야합니까?

종속성 을 포함하는 것이 사용 약관을 위반하지 않는 한 항상 저장소에 종속성을 포함해야한다고 생각 합니다. 빌드하기 전에 올바른 종속성의 올바른 버전을 수동으로 찾는 것보다 성가신 것은 거의 없습니다. 물론, 올바른 종속성을 찾아서 다운로드 할 수있는 자동화 된 도구를 사용하면 쉽게 수행 할 수 있지만 현재 웹에 연결되어 있지 않거나 서버가 다운되었거나 종속성 프로젝트 인 경우 어떻게해야합니까? 완전히 중단되어 오프라인 상태가 되었습니까? 가능한 경우 항상 종속성을 포함하십시오.

종속성을 나머지 프로젝트와 동일한 빌드 스크립트 또는 별도의 빌드 스크립트에서 빌드해야합니까?

소스에서 컴파일해야 할 적절한 이유가 없다면 미리 컴파일 된 버전을 사용하십시오.

그리고 왜 빌드 스크립트에 옵션을 제공하지 않습니까? 종속성도 컴파일해야하는지 여부를 선택하는 간단한 스위치입니다. 사용자가 종속성을 컴파일하기로 선택한 경우 제품의 빌드 스크립트에서 자체 빌드 스크립트를 호출하십시오. 따라서 사용자는 종속성의 빌드 스크립트를 수동으로 호출하거나 모든 것을 전체 빌드하도록 선택할 수 있습니다. 그러나 소스에서 컴파일 할 이유가 없다면 바이너리를 바이너리로 제공합니다. 오픈 소스 세계에서는 일부 라이센스에 따라 소스를 제품과 함께 배포해야하지만 사전 컴파일 할 수는 없습니다.

한마디로 : 가능 하면 완전한 독립형, 작동 패키지를 제공하십시오. 사용자에게 가장 편리합니다.


1
@ tdammers : Linux 시스템에 소프트웨어를 설치하면 패키지 관리자가 모든 작업을 수행합니다. 그러나 인터넷 연결이 필요하고 패키지는 특정 형식이어야하며 자동화 도구가이를 도울 수 있다고 명시 적으로 언급했습니다. 예를 들어 .NET 오픈 소스 도구에는 이러한 시스템을 사용할 수 없습니다. NHibernate 또는 Castle Windsor와 같은 sourceforge 도구를 살펴보면 모든 종속성이 바이너리로 포함되어 있음을 알 수 있습니다. 그리고 그것이 할 수있는 유일한 일입니다.
팔콘

1
@tdammers : 우연히도 오늘 리눅스 시스템에 OpenOffice SDK를 설치해야합니다. 패키지 관리자를 통해 SDK를 설치할 수 없으므로 웹 사이트에서 RPM을 가져 왔습니다. "rpm --install"을 실행할 때 가장 먼저받는 메시지는 무엇이라고 생각하십니까? 오류 : 실패한 종속성 : ooobasis3.3-sdk-3.3.0-9567.x86_64에서 ooobasis3.3-core01이 필요합니다 -OH JOY!
팔콘

2
@ tdammers : 맞습니다. 그러나 설치와 설치 만 쉬운 경우이 중복성을 갖고 싶습니다. 의존성 지옥을보고 싶을 때 / usr / lib 디렉토리를 살펴보십시오. 중복, 서브 버전, 그리고 어떤 프로그램이 어떤 라이브러리를 사용하는지조차 모릅니다. 물론, 패키지 관리자가 처리하도록하십시오! 그러나 패키지 관리자가 내가 언급 한 오픈 오피스 사례와 같이 처리 할 수 ​​없다면 어떻게 될까요? 그것은 기본적으로 당신이 망했다는 것을 의미하며 무언가를 설치하는 데 어려움을 겪습니다.
팔콘

2
@ tdammers : 그리고 이것과 내 경험에 대해 더 많이 생각합니다. 패키지 관리자를 통해 설치할 때조차도 종속성이 실패하거나 일부 프로그램이 실행을 거부했기 때문에이 디렉토리에서 심볼릭 링크를 만들어야하는 횟수조차 셀 수 없습니다. 어쩌면 지금 상황이 나아 졌을 지 모르지만 어떤 일을 실행하는 것은 여전히 ​​어려운 일입니다. 응용 프로그램과의 종속성을 방금 제공 한 경우 피할 수있는 문제입니다. 번거 로움을 피하기 위해 몇 MB의 추가 공간을 기꺼이 지불하겠습니다.
팔콘

2
@ tdammers : 특정 Linux 시스템에 특정 프로그램을 설치하는 방법에 대한 웹의 수많은 자습서 가이 문제의 목격자입니다.
팔콘

3

이것은 귀하의 유스 케이스에 적용되거나 적용되지 않을 수 있지만, 회사에서하는 일은 각 지사에 "References"폴더를 포함시키는 것입니다. 여기에 타사 DLL을 배치합니다. 이로 인해 소스 제어에서 변경되지 않는 바이너리가 많이 중복되지만 스토리지는 저렴하며 각 지점 및 태그는 정확히 예상되는 종속성 (및 버전)을 갖습니다.

종속성을 직접 컴파일하고 컴파일 된 바이너리를 해당 폴더로 옮깁니다. 우리 자신의 사내 공유 라이브러리도 이와 같이 취급됩니다. 그렇게하면 사전 컴파일 된 독점 라이브러리, 오픈 소스 라이브러리 및 사내 라이브러리에 동일한 기술이 적용됩니다.


실제로 다시 읽었으므로 지금 귀하의 질문에 대답하는 한 똑같은 작업을 수행하고 프로젝트에서 사전 컴파일 된 1.3.5 버전의 Lua를 사용한다고 언급하십시오.


1

저장소에 종속성이 포함되어야합니까?

이 종속성이 2 진 종속이 아닌 제품 (소스 종속)의 일부인 경우 저장소에서 참조 할 수 있습니다 (SCM 방법에 사용 가능 ).

종속성을 나머지 프로젝트와 동일한 빌드 스크립트 또는 별도의 빌드 스크립트에서 빌드해야합니까?

전혀 중요하지 않습니다. 요구 사항 (속도 / 투명도 / 관리 가능성 등)에 따라 모든 방법을 선호 할 수 있습니다.


0

우리는 이클립스 매장이기 때문에 Buckminster 를 사용하여 빌드 / 조립 / 배포 프로세스를 관리 하기 시작했습니다 .

우리의 첫 번째 단계는 기존의 모든 종속 라이브러리를 꺼내고 buckminster가 올바른 라이브러리를 구체화하는 것입니다. 따라서 훨씬 빠르고 작은 배포가 가능합니다.

다음 단계는 모 놀리 식 svn저장소를 일련의 모듈 식 저장소 로 옮기는 것 git입니다.

buckminster가 git하위 모듈 (또는 그 문제에 대한 수은 하위 할당)과 얼마나 잘 통합되는지 는 모르지만 buckminster는 주어진 구성 요소에 사용되는 VCS와 관련하여 무관심하다는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.