建立 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/yanbin/Workspaces/test_play_2/app
[info] test:javaSource
[info]    /Users/yanbin/Workspaces/test_play_2/test
[info] compile:scalaSource
[info]     /Users/yanbin/Workspaces/test_play_2/app
[info] test:scalaSource
[info]     /Users/yanbin/Workspaces/test_play_2/test
[info] compile:resourceDirectory
[info]     /Users/yanbin/Workspaces/test_play_2/conf
[info] test:resourceDirectory
[info]     /Users/yanbin/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 文件里写上

第四行("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 上去的.

本文链接 https://yanbin.blog/layout-like-playframework-2/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments