如何在 Play 中组织 java 和 scala 代码?

How to organize java and scala code in Play?

activator new

结果:

Fetching the latest list of templates...



Browse the list of templates: http://lightbend.com/activator/templates
Choose from these featured templates or enter a template name:
  1) minimal-akka-java-seed
  2) minimal-akka-scala-seed
  3) minimal-java
  4) minimal-scala
  5) play-java
  6) play-scala
(hit tab to see a list of all templates)
>

play-javaplay-scala的剖析如下:

ls project-*/app
...-java/app:
controllers  filters  Filters.java  Module.java  services  views

...-scala/app:
controllers  filters  Filters.scala  Module.scala  services  views

根据 this 文档:

You also have the option of using the default layout used by SBT and Maven. Please note that this layout is experimental and may have issues. In order to use this layout, you must disable the layout plugin and set up explicit monitoring for twirl templates:

build.sbt                  → Application build script
src                        → Application sources
 └ main                    → Compiled asset sources
    └ java                 → Java sources
       └ controllers       → Java controllers
       └ models            → Java business layer
    └ scala                → Scala sources
       └ controllers       → Scala controllers
       └ models            → Scala business layer
    └ resources            → Configurations files and other non-compiled resources (on classpath)
       └ application.conf  → Main configuration file
       └ routes            → Routes definition

讨论

基于 应该合并 java 和 scala 文件?例如:

合并

...-java/app/controllers:
AsyncController.java  CountController.java  HomeController.java

...-scala/app/controllers:
AsyncController.scala  CountController.scala  HomeController.scala

.../app/controllers
AsyncController.java  CountController.java  HomeController.java
AsyncController.scala  CountController.scala  HomeController.scala

这是结合 java 和 scala 类 的 Play 剖析还是应该在 app/controllers 文件夹中创建 java 和 scala 目录?

驻留在 scala 和 java 项目中的 routes 文件是相同的:

# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# An example controller showing a sample home page
GET     /                           controllers.HomeController.index
# An example controller showing how to use dependency injection
GET     /count                      controllers.CountController.count
# An example controller showing how to write asynchronous code
GET     /message                    controllers.AsyncController.message

# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file               controllers.Assets.versioned(path="/public", file: Asset)

您不需要特殊的 "combine" 布局 - 您可以在同一个包中使用 java 和 scala。

示例:

package controllers;

public class MyJavaClass {

  public static String getName(){
    return "My Name";
  }
}

只需将 controllersmodels 文件夹放入 app 文件夹,然后将 scala 和 java 文件放入其中。

build.sbt            → Application build script
app                  → Application sources
 └ controllers       → controllers (java or scala)
 └ models            → business layer (java or scala)
 └ views             
public
conf
 └ application.conf  → Main configuration file
 └ routes            → Routes definition