Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@mzuk

複数バージョンsbt混合のマルチプロジェクト

More than 1 year has passed since last update.

sbt0.13 でビルドされているマルチプロジェクトを sbt1 に上げようとしたとき、一部 sbt0.13 でしか提供されていないlibraryがあって対応に困った。

最終的にsbtが複数バージョン混じった状態に落ち着けたので、その対応メモ

確認に用いたsbtのバージョン

sbt1 => 1.2.7
sbt0.13 => 0.13.17

概要

元の状態は以下の通り。

projectA projectB でそれぞれ common を参照している。commonsbt1 への対応ができるとする。
projectBsbt0.13 のままにする。

.
├── common
├── projectA
└── projectB

対応後のイメージは以下。

.
├── common
├── projectA-sbt1
└── projectB-sbt0.13

対応方法

commoncommon-src , common-sbt1 , common-sbt0_13 の3つのディレクトリに分ける。

  • common-src: ソースコードを格納する
  • common-sbt1: sbt1用のビルド設定を格納する
  • common-sbt0_13: sbt0.13用のビルド設定を格納する
.
├── common-src
│   ├── main
│   └── test
├── common-sbt1
│   ├── project
│   │  ├── build.properties
│   │  └── plugins.sbt
│   └── build.sbt
├── common-sbt0_13
│   ├── project
│   │  ├── build.properties
│   │  └── plugins.sbt
│   └── build.sbt
├── projectA-sbt1
└── projectB-sbt0_13

common-sbt1 , common-sbt0_13 のビルドは、ビルドパスを common-src を向くようにしてやればいい。

Customizing paths

common-sbt1/build.sbt
common-sbt0_13/build.sbt

sourcesInBase := false
scalaSource in Compile := (baseDirectory(_ / "../common-src/main")).value
scalaSource in Test := (baseDirectory(_ / "../common-src/test")).value
resourceDirectory in Compile := (baseDirectory(_ / "../common-src/main/resources")).value
resourceDirectory in Test := (baseDirectory(_ / "../common-src/test/resources")).value

// 以下はそれぞれのsbtに合わせてscalaVersionなどを修正

projectA-sbt1/build.sbt

lazy val projectA = (project in file("."))
  .dependsOn(RootProject(file("../common-sbt1")))

projectB-sbt0_13/build.sbt

lazy val projectB = (project in file("."))
  .dependsOn(RootProject(file("../common-sbt0_13")))

sbt-scalariform などを使っていて、sbt1に上げるタイミングで sbt-scalafmt に変えたいとき、 commonsbt-scalariform の最新バージョン(sbt1, sbt0.13の両方が提供されている)のままにして、sbt1に上げたプロジェクトのみ sbt-scalafmt に変えるのが良さそう。neo-sbt-scalafmt でもいいかも。

common-sbt1にのみ sbt-scalafmt を設定して、common-sbt0_13からフォーマット用のプラグイン設定を取り除いても動作しますが、common-sbt0_13側からフォーマッタが起動しないので微妙そう。

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?