2013-03-06 6 views
0

질문 제목이 맞는지 확실하지 않지만 질문을 읽어보십시오.왜 의존성 관리가 복잡해야합니까?

저는 직장 생활의 대부분 (11 년 가까이) 동안 C/C++ 작업을 해왔습니다. 우리는 C/C++ 소스/헤더 파일만을 가지고 있었고 모든 의존성은 Makefiles에 의해 관리되었습니다. 일은 간단하고 다루기 쉽습니다.

지난 1 년 동안 나는 자바 도메인으로 이동했다. 그리고 나는 이 극도로 짜증을 낸다고 느낀다. 새로운 것을 다루는 가장 어려운 측면은 의존성 관리자 다. 예 : 빌더, 빌더, 빌더, 기타 등등

오픈 소스 세계에서 새로운 것을 다운로드 할 때마다 컴파일, 빌드, 실행 환경을 설정하는 데 상당한 시간을 할애 할 수 있습니다. 그것도 내가 일식을 사용하고 있습니다. 왜 모든 종속성을 다운로드 할 소프트웨어와 함께 배치 할 수 있습니까 ?? 왜 maven, leiningen 등과 같은 도구는 의존성을 다운로드하기 위해 별도의 인터넷 연결을해야합니다. 필자는 Maven이 로컬 저장소를 구성하고 어쨌든 전체 인터넷을 다운로드 할 때 종속성을 로컬에서 찾을 수 있어야하지만이 모델이 사용되는 이유는 알고 있습니다. 나는 방화벽 뒤에있어 모든 것이 액세스 가능하지 않고 도구가 종속성을 다운로드하지 못합니다. 나는 같은 상황이 대부분의 작업 환경에 있다고 확신한다.

최근에 나는 clojure로 시작했고, 소년은 clojure로 구성된 일식을 얻는 것이 고통 스러웠습니다. leiningen은 어떤 clojure 개발과 함께 사용해야하는 마술이되어야합니다. 때로는 배우기의 개념을 배우는 것보다 라이온이 더 중요하다는 것을 느낀다. 나는 '자체 설치'가 나를 위해 작동하지 않았기 때문에 leiningen을 위해 'standalone'jar 파일을 다운로드했다. 그러나 그것은 나를 속였습니다. 마자 'lein'명령을 실행하자마자 인터넷에 연결되어 있고 다운로드를하려고합니다. 왜? 그것은 심지어 인터넷에 연결하지 않고 도움말 메뉴를 인쇄하지 않을 것입니다. 왜? 인터넷 방화벽을 우회하지 않고도 그 요구를 충족시킬 수있는 방법이 없습니다. 알고 싶지 않습니다. 아무도이 사람이 원하는 모든 것을 말해 줄 수는 없습니다. 다른 방법은 없습니다.

그리고 모든 사람이 자신의 것을 발명 한 것으로 보입니다. 자바는 단순한 개미를 가지고 있었고, Maven에 갔었습니다. 어떤 프로젝트는 Ruby 기반 빌더를 사용했고, Clojure는 leiningen을 사용했고, Scala는 sbt를 사용했습니다. 가서 뭔가 다른게있어. 왜? 왜 우리는 이미 복잡성으로 가득 찬 세계에서 이러한 복잡성을 추가로 필요로 하는가. 왜 단 하나의 도구가 없는가?

자바 기술 전문가 모두 내 호언 장담하시기 바랍니다. 나는이 질문이 downvoted되고 물건을 이해하기에 충분히 열심히 노력하고 있지 않은 누군가로부터 닫혀있을 것이라고 확신한다. 그러나 나는이 불필요한 복잡성과 싸우는 데 충분한 시간을 보냈다는 것을 믿어주십시오.

다른 사람들이이 문제를 어떻게 해결하는지 알고 싶거나이 문제에 직면 한 유일한 불행한 사람 일뿐입니다.

+4

"나는이 문제가 충분히 이해 될 수 있도록 열심히 노력하고 있지 않은 사람에게서 내려진 것처럼 닫힙니다."라고 확신합니다. 우리는 구체적인 질문에 답합니다. 나는 그것이 괴롭다 고 확신하지만, 당신은 답을 얻을 기회를 가질 수있는 무언가로 당신의 질문을 구체화 할 필요가 있습니다. 이것은 할 수 없습니다. – Dmitry

+0

질문은 복잡한 종속성 관리가 필요한 이유이며 이러한 문제에 직면 한 유일한 이유는 무엇입니까? 다른 사람들이 이러한 쟁점에 직면하고 있다면, 이것에 관해서 뭔가 할 수 있을까요? 귀하의 의견에 감사드립니다. – weima

+0

무언가에 대해 할 수있는 많은 문제가 있지만 뭔가를하기에는 너무 많은 문제가 있습니다. 예를 들어, C++은 을 포함하지 않고 std :: cout << string을 시도하면 가비지를냅니다. 다시 말하지만, 이것은 더 철학적 인 질문이며, 복잡성은 여기에 있습니다. – Dmitry

답변

2

이 질문에 대한 답변을 수락 할 수 없습니다. 나는 겸손하게 당신에게 요소를 제공 할 수 있습니다, 잘하면 그들은 당신이 문제에 대한 관점을 얻을 것을 도울 것입니다. 다른 사람들과 연결되어 스크립트

  • 건물을위한 자바 도구의 조각을 사용하여 제어를 운동하는 동안 그들 중 일부는 선언이다

    • :

      주로 2 내가 자바를 식별 문제가 구축 시스템이있다 우주의 자바 스튜어드 십, 기술적 선택이 아닙니다.

    Maven은 공식적인 문법을 표준 방식으로 사용하여 빌드를 정의하는 방법의 가장 중요한 요소입니다. 너의 치어 리더.xml 파일은 단지 빌드 이상을 포함하고 있습니다 : 그것은 유물, 프로젝트 메타 데이터, 모듈 및 가져온 플러그인의 ID입니다. 의존성 및 저장소 선언에 특히주의를 기울여 처리합니다. Maven이 선언적입니다.

    일부 프로그래머에게는 이것이 좋으며 새로운 프로젝트를 자주 만들지는 않습니다. 그것은 시간이 지남에 잘 작동하며, 빌드를 훌륭하게 통합합니다.

    개미는 특정 순서로 연결된 작업을 정의하는 다른 시스템입니다. 모든 정의는 XML을 사용하여 이루어지며 실제로 스크립트를 작성하고 함께 묶일 방법을 선언합니다.

    Buildr (전체 공개 : 저는 커미터입니다.) 추가 단계와 복잡한 테스트를 수행해야하는 빌드와 강성에 대한 선언적 접근 방식의 비효율을 처리하는 좌절감에서 작성된 빌드 시스템입니다 빌드에 XML 사용. 스크립트 기반으로 구성보다 규칙을 적용합니다 (몇 가지 좋은 기본값을 기대하지만, 사물을 변경해야하는 경우 운전하게 함).

    나는 Gradle과 SBT에 익숙하지 않지만, 나는 그들이 듣고있는 것에서 이러한 접근법을 확장하고 발전 시킨다고 생각한다.

    이렇게하면 빌드 도구 측면에서 더 나은 풍경 그림을 얻을 수 있습니다.

    표준 빌드 도구가 출현하지 않은 이유는 아마도 Sun이 Java로 하나를 추진하지 않았다는 사실과 관련이 있습니다. 결국, 나는 Ant를 채택했다고 생각한다. (나는 대부분의 JSR jar를 가지고있다.) 또한이 빌드 시스템 중 일부를 확장하여이 공간에 빌드 된 일부 제품이 있습니다. 사람들이 측면에서 코드를 작성하는 것보다는 코드를 유지 보수하는 것 사이에 항상 큰 차이가있을 것입니다.

    글쎄, 사람들은 논쟁한다. 빌드 시스템은 화염 전쟁을 시작하는 좋은 방법입니다. 일반적인 요소 중 일부가 Maven 유물 주변에 잘 정착하고 있지만 표준에 동의하는 데 어려움이 있습니다.

    • 종속성의 사용 : 여기에 인터넷을 다운로드하고 다시, 그것은 다소 긴 이야기하지만, 필요에 관해서는

      는 불필요한 다운로드의 필요성을 트리거 할 수있는 몇 가지 있습니다 SNAPSHOT은 최신 스냅 샷을 가져 오려고 시도합니다. 이것은 훌륭한 계획이지만 그것의 통행료가 소요됩니다. 스냅 샷에 의존하는 무언가에 의존 할 수도 있고 그 때문에 다운로드를받을 수도 있습니다.

    • Maven은 아티팩트를 다시 다운로드하지 않지만 때때로 md5를 확인합니다. 이것은 수정하기 쉽습니다. 명령 줄에서 -O 옵션을 사용하기 만하면됩니다.

    Buildr과 같은 도구는 한 번만이 문제를 해결하기 위해 만들어졌습니다. 첫째로, 당신은 당신이 말한 것을 다운로드 만합니다. 둘째, 요청하지 않으면 다시 연결되지 않습니다. 기본적으로 Buildr은 당신이 그것을 구할 수는 있지만 이행 적 의존성 게임을 플레이하지는 않지만 명시 적으로해야합니다.

    이 정보가 도움이 되었기 때문에 Java 토지에서의 여정이 앞으로 더욱 어려워지기를 바랍니다.

  • 관련 문제