소규모 소프트웨어 라이브러리가 다른 라이브러리를 사용하지 않아야합니까?


13

방금 소수의 클래스와 메소드를 제공하는 작은 Java 라이브러리를 출시했습니다. Maven으로 프로젝트를 구축 한 후 즉시 여러 타사 라이브러리를 사용하여 목표를 달성했습니다.

  • commons-lang3 (일부 일반적인 Java 기능)
  • slf4j-api (로깅 용)
  • commons-io (작은 파일 내용-문자 그대로 파일을 한 번 읽습니다.)

내 도서관이 다른 사람들의 눈에 부풀어 오르는 것을 원하지 않습니다. 발자국을 최소화하기 위해 이러한 라이브러리에 대한 의존도를 제거해야합니까? 앞으로 더 많은 라이브러리를 사용할 때 피해야 할 라이브러리 유형에 대한 조언이 있습니까?


1
질문의 구체적인 부분은 대답 할 수 있습니다 : 프로젝트와 콘크리트 라이브러리 및 괜찮은지 여부. 문제는 일반적인 부분 "작은 ... 피해야한다"와 함께 철자를 쓴다는 것입니다. 현재로서는이 질문이 Q & A 형식에 적합하지 않습니다. 답변, 사실, 참고 자료 또는 특정 전문 지식에 의해 답변이 뒷받침 될 것으로 예상되지만이 질문은 토론, 논쟁, 여론 조사 또는 광범위한 토론을 요구할 것입니다. 이 질문이 개선 될 수 있다고 생각되면 FAQ 를 참조하십시오 .
gnat

1
@ gnat 사과드립니다. 일반 스택 오버플로 사용자로서 프로그래머에게는 약간 주관적인 질문이 허용되는 것으로 가정했습니다. 그러한 문제가 괜찮은 Stack Exchange 사이트가 있습니까? 그동안 질문에서 모호한 부분을 제거하겠습니다.
Duncan Jones

2
@gnat이 질문은 원래 형태로도 괜찮습니다.
Thomas Owens

@Thomas 올바른 존중으로, 나는 그렇게 생각하지 않습니다. 대한 원래 버전 을 환영 폴링 게임 : 나는 빨리, 반대 권고를 모두 합리적으로 정당화 두 개의 답을 생각
모기

1
@gnat 둘만? 괜찮아. 그들을 게시하고 투표하자. 정당화와 추론에 반대되는 두 가지 잠재적으로 올바른 대답은 질문을 나쁘게 만들지 않습니다. 3 또는 4 또는 5도하지 않습니다. 라이브러리 개발자가 처리해야하는 문제인 잘 구성된 질문이므로, 정답이 되기 위해서는 그에 대한 부담이 가중 됩니다.
Thomas Owens

답변:


8

귀하의 특정 상황을 고려하여 이에 답변하고 있습니다. 해당 라이브러리를 사용하는 것이 좋습니다. slf4j-api가 구현을 수행하지 않도록하십시오. 즉, 구현 종속성을 "test"로 표시합니다. EG :

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.2</version>
    <scope>test</scope>
</dependency>

이것은 SLF4j FAQ에 자세히 설명되어 있습니다.

다른 두 개의 IME는 항상 이전 버전과 호환됩니다. 따라서 5 년 후에 라이브러리를 사용해야하지만 이전 버전을 사용하는 경우 종속성을 제외하면 코드가 계속 작동합니다. 다시 말해, 이러한 특정 라이브러리를 사용함으로써 다른 사람에게는 jar-hell을 도입하지 않을 것입니다.

maven을 통해 라이브러리를 사용하면 라이브러리가 부풀어 오른 지 알 수 없습니다. 나는 당신에게 의존하고 그것을 사용할 것입니다. 더 작은 설치 공간보다 코드가 올바르게 작동하는 것이 더 중요하다고 생각합니다. 버그가있는 휠을 다시 발명하는 대신 commons-io를 사용하는 것이 좋습니다.


답변 주셔서 감사합니다. 우리가 취해야 할 접근 방식에 대해 광범위하게 동의한다고 생각합니다. 단지 하나의 비트를 수정하는 것-라이브러리 프로젝트에 slf4j를 포함시키는 방법은 단순히 slf4j-api다른 관련 아티팩트 를 포함 하거나 제공하지 않는 것입니다. slf4j.org/manual.html#projectDep를 참조하십시오 .
Duncan Jones

필자 exclude는 의존성에있는 특정 모듈이 slf4j 버전에서 "동의"할 수 없을 때 수행해야하는 두뇌 손상 운동 ( siirc의 수수)을 회상합니다. 당신의 대답에서 모듈 디자이너가 그것을로 노출한다면 provided, 그런 문제가 없을 것입니다. 맞습니까?
gnat

2
@gnat 일반적으로 POM에서 선호하는 버전 하나를 선언하여 (최소한 Maven에서) 해결됩니다. Maven은 아티팩트에 대해 정의 된 "가장 가까운"버전을 사용하며 즉각적인 POM은 전 이적 종속성보다 큽니다. 아마도 이것은 Maven 2.x 릴리스 중에 동작이 변경되었을 수 있습니다.
Duncan Jones

1
slf4j를 +1로 지정하면 +1입니다 provided.
Gary Rowe

@ DuncanJones에게 감사드립니다. 내 maven 버전은 2.2 또는 2.3 이었으므로 어느 버전을 기억할 수 없습니다 (그러나 mvn dependency:analyze제외 될 때까지 쓰레기 버전을 가져 오는 방법 을 확실히 기억하십시오 :)
gnat

1

아니.

"혈액"은 신화입니다. 라이브러리에있는 코드의 양에 관계없이 해당 코드 중 일부가 사용되지 않으면 페이지에 포함되지 않으며 성능이나 메모리 공간에 영향을 미치지 않습니다 .

반면에 추가 기능이 필요한 경우 두 가지 중에서 선택할 수 있습니다. 직접 작성하여 다른 사람들이 이미 해결 한 문제를 해결하는 데 많은 시간과 노력을들이거나 이미 존재하는 솔루션 (테스트 / 디버깅 등)을 사용하도록 선택할 수 있습니다.

이로 인해 다운로드 크기와 디스크 공간이 부족해졌으며 어리석은 숫자를 이야기하지 않는 한 2013 년에는 걱정해야 할 사항의 맨 아래에 가까운 두 가지 요소가 있습니다.

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