Play应用的布局
Play应用的布局是以尽可能简单为标准的。第一次成功编译之后,Play应用如下所示:
app → Application sources
└ assets → Compiled asset sources
└ stylesheets → Typically LESS CSS sources
└ javascripts → Typically CoffeeScript sources
└ controllers → Application controllers
└ models → Application business layer
└ views → Templates
build.sbt → Application build script
conf → Configurations files and other non-compiled resources (on classpath)
└ application.conf → Main configuration file
└ routes → Routes definition
dist → Arbitrary files to be included in your projects distribution
public → Public assets
└ stylesheets → CSS files
└ javascripts → Javascript files
└ images → Image files
project → sbt configuration files
└ build.properties → Marker for sbt project
└ plugins.sbt → sbt plugins including the declaration for Play itself
lib → Unmanaged libraries dependencies
logs → Logs folder
└ application.log → Default log file
target → Generated stuff
└ resolution-cache → Info about dependencies
└ scala-2.11
└ api → Generated API docs
└ classes → Compiled class files
└ routes → Sources generated from routes
└ twirl → Sources generated from templates
└ universal → Application packaging
└ web → Compiled web assets
test → source folder for unit or functional tests
app目录
app包含所有可执行的文件,Java和Scala源代码,模板和编译之后的资源文件。
在app目录中有三个包,每一个对应MVC设计模式中的一个组件:
app/controllers
app/models
app/views
当然你可以增加你自己的包,比如增加一个app/utils包。
注意在Play中,controllers,models和views包的名字只是目前约定的,如果需要的话可以更改,(比如在每一个之前加上前缀com.yourcompany)。
对于编译后的资源文件,比如LESS资源和CoffeeScript资源也有可选择的目录叫app/assets。
Public目录
存储在public目录中的资源是直接为服务器服务的静态资源。
这个目录分成三个子目录,分别存放图片,CSS样式表和JavaScript文件,你应该按照这样的目录来组织你的静态资源,从而保持所有Play应用的一致性。
在一个新创建的目录中,Public目录映射到/assertURl的目录中,但是你可以很简单地改变这些目录,甚至可以为你的资源设置几个不同的目录。
conf目录
conf包含应用的配置文件。其中有两个主要的配置文件:
application.conf:应用的主要配置文件,包含了配置的参数。
routes:注释文件的路径。
如果你需要为你的应用添加特殊的配置选项,最好将更多的选项加到application.conf中。
如果一个类库需要特殊的配置文件,尽量在conf目录下创建。
lib目录
lib目录是可选择的并且包含非管理的库依赖,你想要在编译系统外手动管理的所有jar包,只需将jar包存到该目录,它们将会增加到你的应用路径中。
build.sbt文件
你的项目主要构建声明通常在项目根文件中的build.sbt创建。在project目录中的.scala文件也可以用来声明你项目的创建。
project目录
project目录包含sbt构建定义:
plugins.sbt定义项目要使用的sbt插件。
build.properties包含用来创建你app的sbt版本。
target目录
target目录包含编译系统生成的任意文件,如果你想知道在这里生成了什么,这个目录很有用。
classes包含了所有编译好的类(从Java跟Scala资源文件编译成的)。
classes_managed只包含这个框架管理的类(比如路由器或模板系统生成的类)。它可以增加这个类文件夹作为你的IDE项目外部的类文件夹。
resource_managed包含生成好的资源,比如LESS CSS和CoffeeScript编译结果的典型编译后的资源文件。
src_managed包含生成的资源,比如模板系统生成的Scala资源。
web包含被sbt-web处理后的资源,比如来自app/assets和public文件夹的资源。
典型的.gitignore文件
生成的文件夹应该被你的版本控制系统忽视。这是一个Play应用典型的·.gitignore文件:
logs
project/project
project/target
target
tmp
dist
.cache
默认的SBT布局
你也可以选择使用SBT和Maven默认的布局。请注意这些布局是试验性的,可能会存在问题。为了使用这个布局,你不能使用布局的相关插件并给可用的模板建立明确的检查:
disablePlugins(PlayLayoutPlugin)
PlayKeys.playMonitoredFiles ++= (sourceDirectories in (Compile, TwirlKeys.compileTemplates)).value
下面的代码会阻止Play覆盖默认的SBT布局:
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
└ twirl
└ views → Templates
└ assets → Compiled asset sources
└ css → Typically LESS CSS sources
└ js → Typically CoffeeScript sources
└ public → Public assets
└ css → CSS files
└ js → Javascript files
└ images → Image files
└ test → Unit or functional tests
└ java → Java source folder for unit or functional tests
└ scala → Scala source folder for unit or functional tests
└ resources → Resource folder for unit or functional tests
└ universal → Arbitrary files to be included in your projects distribution
project → sbt configuration files
└ build.properties → Marker for sbt project
└ plugins.sbt → sbt plugins including the declaration for Play itself
lib → Unmanaged libraries dependencies
logs → Logs folder
└ application.log → Default log file
target → Generated stuff
└ scala-2.11.7
└ cache
└ classes → Compiled class files
└ classes_managed → Managed class files (templates, ...)
└ resource_managed → Managed resources (less, ...)
└ src_managed → Generated sources (templates, ...)