2017-11-03 28 views
2

나는 다음과 같은 프로젝트 구조가 있습니다sbt에서 다른 작업에서 라이브러리를 제외하는 방법은 무엇입니까?

/ 
├── project 
| └── ... 
├── src 
| └── ... 
├── lib 
│   ├── prod-lib.jar 
| └── test-lib.jar 
└── build.sbt 

을 내가 프로덕션 환경에 배포하기위한 테스트 환경 및 prod-lib.jar로 배포 test-lib.jar 컴파일 할 필요가있다.

둘 다 내가 필요로하는 것에 액세스하기 위해 동일한 API를 가지고 있으므로 내 소스 코드는 그 어느 것과도 아무런 문제가 없지만 둘 다 배경에서 실행을 구현하는 방법에 미묘한 차이가 있습니다.

"SBT 작업" (아니면 어떤 다른) 한 병 또는 기타를 무시할 수 있습니다 만들 수있는 방법이 있나요,하지만 모두가 어쨌든 assembly 작업을 수행?

답변

0

다른 폴더에 항아리를 넣어 CompileunmanagedBase 키를 설정하고 그에 Test 범위 :

> set unmanagedBase in Compile := baseDirectory.value/"lib-compile" 
> show compile:assembly::unmanagedBase 
[info] /project/foo/lib-compile 
> set unmanagedBase in Test := baseDirectory.value/"lib-test" 
> show test:assembly::unmanagedBase 
[info] /project/foo/lib-test 

그러나 해당 범위 (compile:assembly 또는 test:assembly를) assembly 작업을 호출하는 것을 잊지 마세요에 있기 때문에

> show assembly::unmanagedBase 
[info] /project/foo/lib 
+0

그러나 문제는 내가 fatjar ('assembly'로 생성)가 필요하다는 것입니다 'src' 아래에서 같은 소스이지만, 다른'unmanagedBase' 의존성을가집니다. 나는'assembly-dev'와'assembly-prod'라는 두 개의 태스크를 생성하는 것에 대해 생각하고 있었는데, 각각 다른 'unmanagedBase'를 포함 할 수있었습니다. 나머지 구성은 동일하게 남았습니다. –

+0

죄송합니다. 질문에 대한 답변을 놓치 셨습니다. 문제는 작업의 설정을 재정의 할 수 없다는 것입니다. – laughedelic