如何从 sbt 中的不同任务中排除库?
How to exclude libraries from different tasks in sbt?
我有以下项目结构:
/
├── project
| └── ...
├── src
| └── ...
├── lib
│ ├── prod-lib.jar
| └── test-lib.jar
└── build.sbt
我需要使用 test-lib.jar
进行编译以部署到测试环境中,使用 prod-lib.jar
进行编译以部署到生产环境中。
它们都具有相同的 API 来访问我需要的东西,所以我的源代码对它们都没有任何问题,但是它们在如何实现它们的执行方面有细微的差别背景.
有没有办法创建一个 "sbt task"(或者其他任何东西)可以忽略一个 jar 或另一个,但在两者中都执行 assembly
任务呢?
将你的 jar 放在不同的文件夹中,并在 Compile
和 Test
范围内相应地设置 unmanagedBase
键:
> 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
但是不要忘记调用assembly
相应范围内的任务(compile:assembly
或test:assembly
),因为在Global
中它仍然是默认的:
> show assembly::unmanagedBase
[info] /project/foo/lib
我有以下项目结构:
/
├── project
| └── ...
├── src
| └── ...
├── lib
│ ├── prod-lib.jar
| └── test-lib.jar
└── build.sbt
我需要使用 test-lib.jar
进行编译以部署到测试环境中,使用 prod-lib.jar
进行编译以部署到生产环境中。
它们都具有相同的 API 来访问我需要的东西,所以我的源代码对它们都没有任何问题,但是它们在如何实现它们的执行方面有细微的差别背景.
有没有办法创建一个 "sbt task"(或者其他任何东西)可以忽略一个 jar 或另一个,但在两者中都执行 assembly
任务呢?
将你的 jar 放在不同的文件夹中,并在 Compile
和 Test
范围内相应地设置 unmanagedBase
键:
> 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
但是不要忘记调用assembly
相应范围内的任务(compile:assembly
或test:assembly
),因为在Global
中它仍然是默认的:
> show assembly::unmanagedBase
[info] /project/foo/lib