建立 Play 2 框架一样的目录布局

sbt 项目继承并扩展了 Maven 的默认项目布局, 加入了 Scala 代码的支持, 所以目录如 Shell 命令 mkdir -p src/{main,test}/{java,scala,resources} 生成的目录结构, 即

.
└── src
    ├── main
    │   ├── java
    │   ├── resources
    │   └── scala
    └── test
        ├── java
        ├── resources
        └── scala

这个目录目录虽然很清晰, 但把 Java 和 Scala 代码拆在两处没多大必要, 其次是层次多了点. 因使用 Play Framework 时日有点久了, 比较习惯于 Play 2 改造后的项目布局. 我们启动到 Play 2 的 activator(其实就是加入了定制的 sbt) 控制台, 用命令看它的目录布局

[Test Play 2] $ show javaSource test:javaSource scalaSource test:scalaSource resourceDirectory test:resourceDirectory
[info] compile:javaSource
[info]     /Users/uqiu/Workspaces/test_play_2/app
[info] test:javaSource
[info]    /Users/uqiu/Workspaces/test_play_2/test
[info] compile:scalaSource
[info]     /Users/uqiu/Workspaces/test_play_2/app
[info] test:scalaSource
[info]     /Users/uqiu/Workspaces/test_play_2/test
[info] compile:resourceDirectory
[info]     /Users/uqiu/Workspaces/test_play_2/conf
[info] test:resourceDirectory
[info]     /Users/uqiu/Workspaces/test_play_2/test/resources

理清一下的话, 它的目录布局就是 mkdir -p app conf test/resources 生成的结构

.
├── app
├── conf
└── test
    └── resources

是不是清爽了许多呢? 其实我们项目到现在都还没有使用到 test/resources 目录, 所以只要一个平面的目录结构, 即 app(Java 和 Scala 产品代码), conf(配置文件), 和 test(测试代码, 无论 Java 或 Scala) 目录.

Play 2 实现上面的布局是由 PlayLayoutPlugin.scala 插件代码来定义的. 那自己的 sbt 项目如何定义这样的目录结构呢, 照抄吗. 只要在自己的 build.sbt 文件里写上

sourceDirectory in Compile := baseDirectory.value / "app"
sourceDirectory in Test := baseDirectory.value / "test"

resourceDirectory in Compile := baseDirectory.value / "conf"
resourceDirectory in Test := (sourceDirectory in Test).value / "resource"

scalaSource in Compile := baseDirectory.value / "app"
scalaSource in Test := baseDirectory.value / "test"

javaSource in Compile := baseDirectory.value / "app"
javaSource in Test := baseDirectory.value / "test"

第四行("resource" 行) 没在 PlayLayoutPlugin.scala 中定义, 我自己加上去的, 如果用不上就不要它. 然后进入 sbt 控制台, 用 show javaSource test:javaSource scalaSource test:scalaSource resourceDirectory test:resourceDirectory 看下输出应该就是我们想要的目录布局.

如果去掉前两行一般来说也说得过去, 但用 show sourceDirectory compile:sourceDirectory test:sourceDiretory 显示的分别是 src, src/main 和 src/test 目录. 所以严谨点定义还需像上面八行那样定义布局. 我也可以把它做成一个插件放在 github 上去的.

类别: PlayFramework, Scala. 标签: . 阅读(98). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar
wpDiscuz