2012-05-16 3 views
3

마지막 컴파일 이후의 타임 스탬프와 상관없이 SBT가 "컴파일"작업을 실행할 때마다 SBT가 모든 소스 파일을 컴파일하는 것을 관찰했습니다.SBT는 타임 스탬프에 상관없이 소스 파일을 컴파일합니다.

name := "HelloSbt" 

scalaVersion := "2.8.2" 

unmanagedSourceDirectories in Compile := List(file("src")) 

는 IS 다음 내 프로젝트 구조 (무시 프로젝트와 대상 디렉토리) : 두 개의 소스 파일은 테스트 목적으로 만 빈 개체 정의입니다

./src 
./src/Hello1.scala 
./src/a 
./src/a/Hello2.scala 
./build.sbt 

다음은 내 build.sbt 파일입니다.

나는 "SBT 컴파일"를 입력

, 나는 다음과 같은 정보를 가지고 :

[info] Compiling 2 Scala sources to... 

을 나는 대상 디렉토리에 새로 컴파일 된 클래스 파일을 찾을 수 있습니다.

소스 파일을 수정하지 않고 잠시 후에 "sbt compile"을 다시 입력합니다. 클래스 파일의 타임 스탬프가 최신 인 경우를 제외하고 동일한 정보와 클래스 파일을 얻었습니다. 나는 두 번째 컴파일이 수정 된 소스 파일을 찾지 못할 것이며 컴파일이 일어나지 않을 것이라고 예상했다.

Windows 7과 Debian 모두에서 테스트를 수행했습니다. 테스트하는 동안 에디터가 열리지 않았습니다. 마지막 빌드 이후 수정 된 파일 만 컴파일 할 수있는 동안 사용자 정의 된 src 디렉토리를 설정하는 방법에 대한 힌트를 줄 수 있습니까?

감사

가 절대 경로 인 것처럼 상대 경로를 사용하고 있기 때문에입니다
+1

답변이 없지만 문제는 열려 있습니다. 나는 적어도 경고가 보장된다고 생각한다. –

답변

1

. 어쨌든 결과를내는 데 놀랍지 만, 어쨌든 다음과 같이 작성해야합니다.

unmanagedSourceDirectories in Compile <<= baseDirectory(base => List(base/"src")) 
+0

감사합니다. Daniel. BTW, 어디서 이런 정보를 찾을 수 있습니까? 원래의 질문은 사소하고 공정한 요청 인 것처럼 보였지만 나는 제대로 이해하지 못했습니다. 나는 SBT를 배우는 데 많은 시간을 (적어도 예상했던 것 이상으로) 보냈지 만, 나의 필요에 따라 SBT를 구부리기가 어렵다고 생각합니다. – Codism

+0

안녕 Daniel, 내 관찰을 확인해 주시겠습니까? 수정 된 파일 편집을 테스트 할 때 "touch"를 사용하여 파일 타임 스탬프를 업데이트했습니다. 그러나 업데이트 된 타임 스탬프로는 재 컴파일을 시작할 수 없습니다. 다시 컴파일을 시작하려면 소스 파일을 다르게해야합니다. 이 모든 것은 SBT가 각 소스 파일에 적어도 일부 지문을 저장해야한다는 것을 의미하기 때문에 빌드 도구에 대해서는 과장된 것으로 보이지만 시간 소인은 대부분의 시간 동안 작동해야합니다. 그 뒤에있는 디자인 결정은 무엇입니까? (저는 방금 관심이 있습니다.) – Codism

+0

@ 코디즘 두 가지 주석을 질문으로 전환 할 수 있습니다. 앞의 두 가지 질문과 첫 번째 사례의 특정 문제를 언급하여 공개적으로 질문을 피하십시오. 대답은 코멘트에 맞지 않을 것이고, 게다가 다른 사람들에게도 유용 할 것입니다. 그리고 내가 줄 수있는 것보다 더 나은 대답을 얻을 수도 있습니다. –

관련 문제