2017-01-11 1 views
2

예기치 않은 (오직 나를 위해?) ScalaC 동작이 있습니다.
TL, DR은 코드베이스를 maven에서 bazel로 마이그레이션하는 동안 내가 본 문제점을 재현 한 것입니다. 이 마이그레이션의 주요 초점 중 하나는 각 클래스가 컴파일에 필요한 종속성을 최소화하여 빌드가 필요할 때만 트리거되도록하는 것입니다. >ClassUsingFoo (사용) - ->SupplierSupplier 경우 ClassIndirectlyNeedingFoo 휴식의 컴파일 클래스 경로에없는 내가 본 불행하게도 어떤scalac이 classpath에 전이 의존성을 필요로하는 이유

주어진 ClassIndirectlyNeedingFoo (사용)이 있다는 것입니다. 자세한 내용은 여기 (https://github.com/ittaiz/scalac-troubleshooting)입니다.
누군가 scalac이 이와 같이 행동하는 이유를 알고 있다면 정말 고맙겠습니다.
감사합니다. 짧은 대답은 Whyanyone에 완전히 명확하지 않은 경우 그래서

BTW, 공급자는 ... 소스 또는 ClassIndirectlyNeedingFoo의 바이트 코드에 확인

+1

왜 클래스 패스에 전이 의존성이 필요하지 않습니까? –

+0

이것은 예상되는 동작입니다. 그러나 스칼라 센터는이 분야에서 개선을 시도 할 수 있습니다. https://github.com/scalacenter/advisoryboard/blob/master/proposals/009-improve-direct-dependency-experience.md 및 https://github.com/scalacenter/advisoryboard/blob/master/minutes/003을 참조하십시오. -X6- # -project-scp-009-build-use-only-direct-dependencies에 대한 사용자 경험 향상 –

+0

@MichaelZajac'javac'은 그것없이 작동하고'Supplier'는 언급되지 않았기 때문에 내가 컴파일하는 것의 소스 코드 또는 바이트 코드에서. 런타임에 분명히 필요합니다. @SethTessue 스탁이 필요로하는 것을 미리 배울 수있는 방법에 대한 아이디어? 물론 소스/바이트 코드로는 충분하지 않습니다. 대략적인 개념으로 컴파일러 플러그인에 대한 생각. 감사! – Ittai

답변

2

아니다 (참조 # 4). 분명한 사실은 scalac은 때때로 생각보다 많은 의존성을 필요로한다는 것이고, 때로는 이런 일이 발생했을 때 bug이라는 것이 명백하다는 것입니다.

더 제이크 Zaugg와 Gitter에 대한 토론에서 내 위의 문제는 위의 링크와 같은 버그 가족의 별개라고 생각하는 것 같습니다.

의견에 Seth가 연결되어 있기 때문에 ScalaCenter은이 영역을 명확히하기 위해 proposal (original PR)을 수락했습니다. 스텁 오류의 사용자 경험

  1. 개선의 Statement 중심 :이 문제에 대부분의 관련
    이 네 가지 제안이다 그들은 오히려 드문 예기치 않은 것보다, 예상되는 일반적인 경우 있음 , 또는 치명적인 상태.
  2. 스텁 오류를 발생시키는 사례 수 감소 ... 즉, 스텁 오류가 현재 발생하는 더 많은 사례가 으로 성공적으로 컴파일되도록 허용하여 더 적은 직접적인 종속성을 허용합니다.
  3. 컴파일 중에 사용 된 모든 기호 ( 원본에 달리 언급되지 않은 기호 포함)에 대해 import 문을 요구하는 컴파일러 플래그. -Ywarn-unused-imports으로 대칭의 경우이 옵션은 -Ywarn-undeclared-imports 일 수 있습니다. 일 수 있습니다. 주로 이 직접 종속성을 사용하여 빌드를 유지 관리하는 데 도움이되지 않고, 은 전이에서 직접 종속성으로 전환하는 것을 지원합니다. 스칼라 언어 사양의 확장을 포함하여, 다른 컴파일 단위에서 기호가 클래스 경로에 있어야하는 모든 경우를 나열
  4. ( @posco 및 @adriaanm에 의해 제안) : 1) 하위 클래스, 2) 반환 슈퍼 클래스 ' 공공 방법의 유형, 3) 직접 참조, 4) 등
  5. 그것은 작업이 시작됩니다 때 나도 몰라하지만 앞서 # 3 갈 agreed했다

.
제안을 공동 저술 한 Eugeene Burmako는 solution 프로토 타이핑을 시작했으며 그 위에 작은 change을 만들었습니다.
지금 이것은 내 문제에 대해해야 할 것입니다.

관련 문제