diff --git a/README.md b/README.md index 8030530..520808e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# JOOQ Play 2.1 Module +# JOOQ Play 2.3 Module This project provides a very simple Play plugin that will invoke the JOOQ generation for a database. The plugin will be invoked on startup of a Play app but will not be executed in Prod mode. diff --git a/project-code/app/org/jooq/play/JooqPlugin.scala b/project-code/app/org/jooq/play/JooqPlugin.scala index a5f46c1..e808682 100644 --- a/project-code/app/org/jooq/play/JooqPlugin.scala +++ b/project-code/app/org/jooq/play/JooqPlugin.scala @@ -5,7 +5,7 @@ import play.core._ import play.api._ import db.{DBApi, DBPlugin} -import play.api.mvc.{SimpleResult, RequestHeader} +import play.api.mvc.{Result, RequestHeader} import java.io.File import org.jooq.util.GenerationTool import org.jooq.util.jaxb.{Target, Database, Generator} @@ -43,7 +43,7 @@ class JooqPlugin(val app: Application) extends Plugin with HandleWebCommandSuppo } } - def handleWebCommand(request: RequestHeader, sbtLink: SBTLink, path: File): Option[SimpleResult] = { + def handleWebCommand(request: RequestHeader, sbtLink: BuildLink, path: File): Option[Result] = { val applyGeneration = """/@jooq/generate""".r diff --git a/project-code/build.sbt b/project-code/build.sbt new file mode 100644 index 0000000..78228f9 --- /dev/null +++ b/project-code/build.sbt @@ -0,0 +1,16 @@ +name := """play-jooq""" + +version := "1.0-SNAPSHOT" + +organization := "org.jooq" + +lazy val root = (project in file(".")).enablePlugins(PlayScala) + +scalaVersion := "2.11.2" + +libraryDependencies ++= Seq( + javaJdbc, + "org.jooq" % "jooq" % "3.4.2", + "org.jooq" % "jooq-meta" % "3.4.2", + "org.jooq" % "jooq-codegen" % "3.4.2" +) diff --git a/project-code/project/Build.scala b/project-code/project/Build.scala deleted file mode 100644 index 42c398c..0000000 --- a/project-code/project/Build.scala +++ /dev/null @@ -1,27 +0,0 @@ -import sbt._ -import Keys._ -import play.Project._ - -object ApplicationBuild extends Build { - - val appName = "play-jooq" - val appVersion = "1.0-SNAPSHOT" - - val appDependencies = Seq( - // Add your project dependencies here, - jdbc, - anorm, - - "org.jooq" % "jooq" % "3.1.0", - "org.jooq" % "jooq-meta" % "3.1.0", - "org.jooq" % "jooq-codegen" % "3.1.0" - ) - - - val main = play.Project(appName, appVersion, appDependencies).settings( - organization := "org.jooq", - - publishArtifact in(Compile, packageDoc) := false - ) - -} diff --git a/project-code/project/build.properties b/project-code/project/build.properties index 0974fce..be6c454 100644 --- a/project-code/project/build.properties +++ b/project-code/project/build.properties @@ -1 +1 @@ -sbt.version=0.13.0 +sbt.version=0.13.5 diff --git a/project-code/project/plugins.sbt b/project-code/project/plugins.sbt index b969b2b..8237e93 100644 --- a/project-code/project/plugins.sbt +++ b/project-code/project/plugins.sbt @@ -5,4 +5,4 @@ logLevel := Level.Warn resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/" // Use the Play sbt plugin for Play projects -addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.0") +addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.4") diff --git a/samples/play-jooq-sample/README.md b/samples/play-jooq-sample/README.md index ebadaf0..b62be39 100644 --- a/samples/play-jooq-sample/README.md +++ b/samples/play-jooq-sample/README.md @@ -5,15 +5,15 @@ It's using Guice to inject the correct implementation of a helper that executes To run the h2 version simple do: - > play + > activator [play-jooq-sample] $ run To run the mysql version you can either run it in Dev mode with the following: - > play + > activator [play-jooq-sample] $ run -Dconfig.file=conf/application.mysql.conf Or run it in Production mode with - > play + > activator [play-jooq-sample] $ start -Dconfig.file=conf/application.mysql.conf diff --git a/samples/play-jooq-sample/app/controllers/Application.java b/samples/play-jooq-sample/app/controllers/Application.java index 0325ba4..556ea20 100644 --- a/samples/play-jooq-sample/app/controllers/Application.java +++ b/samples/play-jooq-sample/app/controllers/Application.java @@ -1,13 +1,16 @@ package controllers; +import models.task.Task; import models.task.TaskHelper; import play.mvc.Controller; import play.mvc.Result; +import scala.collection.JavaConverters; import views.html.index; import javax.inject.Inject; +import java.util.List; -import static play.data.Form.form; +import static play.data.Form.*; public class Application extends Controller { @@ -15,7 +18,10 @@ public class Application extends Controller { TaskHelper taskHelper; public Result index() { - return ok(index.render(taskHelper.getAll())); + List tasks = taskHelper.getAll(); + scala.collection.immutable.List convertedTasks = + JavaConverters.asScalaBufferConverter(tasks).asScala().toList(); + return ok(index.render(convertedTasks)); } public Result createTask() { diff --git a/samples/play-jooq-sample/app/models/PlayConnectionProvider.java b/samples/play-jooq-sample/app/models/PlayConnectionProvider.java index b48e008..1d980b2 100644 --- a/samples/play-jooq-sample/app/models/PlayConnectionProvider.java +++ b/samples/play-jooq-sample/app/models/PlayConnectionProvider.java @@ -5,7 +5,8 @@ import org.jooq.ConnectionProvider; import org.jooq.exception.DataAccessException; import play.Logger; -import play.db.DB; +import play.api.Play; +import play.api.db.DB; import java.sql.Connection; import java.sql.SQLException; @@ -20,7 +21,7 @@ public class PlayConnectionProvider implements ConnectionProvider { @Override public Connection acquire() throws DataAccessException { if (connection == null) { - connection = DB.getConnection(); + connection = DB.getConnection("default", true, Play.current()); } return connection; } diff --git a/samples/play-jooq-sample/app/models/generated/h2/Keys.java b/samples/play-jooq-sample/app/models/generated/h2/Keys.java index 489fe40..ac1a6b6 100644 --- a/samples/play-jooq-sample/app/models/generated/h2/Keys.java +++ b/samples/play-jooq-sample/app/models/generated/h2/Keys.java @@ -9,7 +9,7 @@ * A class modelling foreign key relationships between tables of the PUBLIC * schema */ -@javax.annotation.Generated(value = { "http://www.jooq.org", "3.1.0" }, +@javax.annotation.Generated(value = { "http://www.jooq.org", "3.4.2" }, comments = "This class is generated by jOOQ") @java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class Keys { diff --git a/samples/play-jooq-sample/app/models/generated/h2/Public.java b/samples/play-jooq-sample/app/models/generated/h2/Public.java index f735c6b..c26816f 100644 --- a/samples/play-jooq-sample/app/models/generated/h2/Public.java +++ b/samples/play-jooq-sample/app/models/generated/h2/Public.java @@ -6,12 +6,12 @@ /** * This class is generated by jOOQ. */ -@javax.annotation.Generated(value = { "http://www.jooq.org", "3.1.0" }, +@javax.annotation.Generated(value = { "http://www.jooq.org", "3.4.2" }, comments = "This class is generated by jOOQ") @java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class Public extends org.jooq.impl.SchemaImpl { - private static final long serialVersionUID = 706109300; + private static final long serialVersionUID = 385647136; /** * The singleton instance of PUBLIC @@ -34,7 +34,7 @@ public final java.util.List> getSequences() { private final java.util.List> getSequences0() { return java.util.Arrays.>asList( - models.generated.h2.Sequences.SYSTEM_SEQUENCE_481007AC_A7F8_4495_A921_F5321346FC31); + models.generated.h2.Sequences.SYSTEM_SEQUENCE_70298E0C_BC7D_4C45_9454_2511C6EE3F0D); } @Override diff --git a/samples/play-jooq-sample/app/models/generated/h2/Sequences.java b/samples/play-jooq-sample/app/models/generated/h2/Sequences.java index b9f8dcd..7e677ca 100644 --- a/samples/play-jooq-sample/app/models/generated/h2/Sequences.java +++ b/samples/play-jooq-sample/app/models/generated/h2/Sequences.java @@ -8,13 +8,13 @@ * * Convenience access to all sequences in PUBLIC */ -@javax.annotation.Generated(value = { "http://www.jooq.org", "3.1.0" }, +@javax.annotation.Generated(value = { "http://www.jooq.org", "3.4.2" }, comments = "This class is generated by jOOQ") @java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class Sequences { /** - * The sequence PUBLIC.SYSTEM_SEQUENCE_481007AC_A7F8_4495_A921_F5321346FC31 + * The sequence PUBLIC.SYSTEM_SEQUENCE_70298E0C_BC7D_4C45_9454_2511C6EE3F0D */ - public static final org.jooq.Sequence SYSTEM_SEQUENCE_481007AC_A7F8_4495_A921_F5321346FC31 = new org.jooq.impl.SequenceImpl("SYSTEM_SEQUENCE_481007AC_A7F8_4495_A921_F5321346FC31", models.generated.h2.Public.PUBLIC, org.jooq.impl.SQLDataType.BIGINT); + public static final org.jooq.Sequence SYSTEM_SEQUENCE_70298E0C_BC7D_4C45_9454_2511C6EE3F0D = new org.jooq.impl.SequenceImpl("SYSTEM_SEQUENCE_70298E0C_BC7D_4C45_9454_2511C6EE3F0D", models.generated.h2.Public.PUBLIC, org.jooq.impl.SQLDataType.BIGINT); } diff --git a/samples/play-jooq-sample/app/models/generated/h2/Tables.java b/samples/play-jooq-sample/app/models/generated/h2/Tables.java index 9c93883..29ff15f 100644 --- a/samples/play-jooq-sample/app/models/generated/h2/Tables.java +++ b/samples/play-jooq-sample/app/models/generated/h2/Tables.java @@ -8,7 +8,7 @@ * * Convenience access to all tables in PUBLIC */ -@javax.annotation.Generated(value = { "http://www.jooq.org", "3.1.0" }, +@javax.annotation.Generated(value = { "http://www.jooq.org", "3.4.2" }, comments = "This class is generated by jOOQ") @java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class Tables { diff --git a/samples/play-jooq-sample/app/models/generated/h2/tables/Task.java b/samples/play-jooq-sample/app/models/generated/h2/tables/Task.java index 3fe9f67..749bd1c 100644 --- a/samples/play-jooq-sample/app/models/generated/h2/tables/Task.java +++ b/samples/play-jooq-sample/app/models/generated/h2/tables/Task.java @@ -6,12 +6,12 @@ /** * This class is generated by jOOQ. */ -@javax.annotation.Generated(value = { "http://www.jooq.org", "3.1.0" }, +@javax.annotation.Generated(value = { "http://www.jooq.org", "3.4.2" }, comments = "This class is generated by jOOQ") @java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class Task extends org.jooq.impl.TableImpl { - private static final long serialVersionUID = 915945629; + private static final long serialVersionUID = 170638844; /** * The singleton instance of PUBLIC.TASK @@ -27,27 +27,35 @@ public java.lang.Class getRecordT } /** - * The column PUBLIC.TASK.ID. + * The column PUBLIC.TASK.ID. */ - public final org.jooq.TableField ID = createField("ID", org.jooq.impl.SQLDataType.BIGINT, this); + public final org.jooq.TableField ID = createField("ID", org.jooq.impl.SQLDataType.BIGINT.nullable(false).defaulted(true), this, ""); /** - * The column PUBLIC.TASK.LABEL. + * The column PUBLIC.TASK.LABEL. */ - public final org.jooq.TableField LABEL = createField("LABEL", org.jooq.impl.SQLDataType.VARCHAR.length(255), this); + public final org.jooq.TableField LABEL = createField("LABEL", org.jooq.impl.SQLDataType.VARCHAR.length(255).defaulted(true), this, ""); /** * Create a PUBLIC.TASK table reference */ public Task() { - super("TASK", models.generated.h2.Public.PUBLIC); + this("TASK", null); } /** * Create an aliased PUBLIC.TASK table reference */ public Task(java.lang.String alias) { - super(alias, models.generated.h2.Public.PUBLIC, models.generated.h2.tables.Task.TASK); + this(alias, models.generated.h2.tables.Task.TASK); + } + + private Task(java.lang.String alias, org.jooq.Table aliased) { + this(alias, aliased, null); + } + + private Task(java.lang.String alias, org.jooq.Table aliased, org.jooq.Field[] parameters) { + super(alias, models.generated.h2.Public.PUBLIC, aliased, parameters, ""); } /** @@ -79,6 +87,13 @@ public java.util.List implements org.jooq.Record2 { - private static final long serialVersionUID = 1025693091; + private static final long serialVersionUID = -96768823; /** - * Setter for PUBLIC.TASK.ID. + * Setter for PUBLIC.TASK.ID. */ public void setId(java.lang.Long value) { setValue(0, value); } /** - * Getter for PUBLIC.TASK.ID. + * Getter for PUBLIC.TASK.ID. */ public java.lang.Long getId() { return (java.lang.Long) getValue(0); } /** - * Setter for PUBLIC.TASK.LABEL. + * Setter for PUBLIC.TASK.LABEL. */ public void setLabel(java.lang.String value) { setValue(1, value); } /** - * Getter for PUBLIC.TASK.LABEL. + * Getter for PUBLIC.TASK.LABEL. */ public java.lang.String getLabel() { return (java.lang.String) getValue(1); @@ -105,6 +105,32 @@ public java.lang.String value2() { return getLabel(); } + /** + * {@inheritDoc} + */ + @Override + public TaskRecord value1(java.lang.Long value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TaskRecord value2(java.lang.String value) { + setLabel(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TaskRecord values(java.lang.Long value1, java.lang.String value2) { + return this; + } + // ------------------------------------------------------------------------- // Constructors // ------------------------------------------------------------------------- @@ -115,4 +141,14 @@ public java.lang.String value2() { public TaskRecord() { super(models.generated.h2.tables.Task.TASK); } + + /** + * Create a detached, initialised TaskRecord + */ + public TaskRecord(java.lang.Long id, java.lang.String label) { + super(models.generated.h2.tables.Task.TASK); + + setValue(0, id); + setValue(1, label); + } } diff --git a/samples/play-jooq-sample/app/models/generated/mysql/Keys.java b/samples/play-jooq-sample/app/models/generated/mysql/Keys.java index 3d40a74..c261fa9 100644 --- a/samples/play-jooq-sample/app/models/generated/mysql/Keys.java +++ b/samples/play-jooq-sample/app/models/generated/mysql/Keys.java @@ -9,7 +9,7 @@ * A class modelling foreign key relationships between tables of the tasks * schema */ -@javax.annotation.Generated(value = { "http://www.jooq.org", "3.1.0" }, +@javax.annotation.Generated(value = { "http://www.jooq.org", "3.4.2" }, comments = "This class is generated by jOOQ") @java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class Keys { diff --git a/samples/play-jooq-sample/app/models/generated/mysql/Tables.java b/samples/play-jooq-sample/app/models/generated/mysql/Tables.java index e70fdf0..c05926d 100644 --- a/samples/play-jooq-sample/app/models/generated/mysql/Tables.java +++ b/samples/play-jooq-sample/app/models/generated/mysql/Tables.java @@ -8,7 +8,7 @@ * * Convenience access to all tables in tasks */ -@javax.annotation.Generated(value = { "http://www.jooq.org", "3.1.0" }, +@javax.annotation.Generated(value = { "http://www.jooq.org", "3.4.2" }, comments = "This class is generated by jOOQ") @java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class Tables { diff --git a/samples/play-jooq-sample/app/models/generated/mysql/Tasks.java b/samples/play-jooq-sample/app/models/generated/mysql/Tasks.java index 5c1a956..4177f02 100644 --- a/samples/play-jooq-sample/app/models/generated/mysql/Tasks.java +++ b/samples/play-jooq-sample/app/models/generated/mysql/Tasks.java @@ -6,12 +6,12 @@ /** * This class is generated by jOOQ. */ -@javax.annotation.Generated(value = { "http://www.jooq.org", "3.1.0" }, +@javax.annotation.Generated(value = { "http://www.jooq.org", "3.4.2" }, comments = "This class is generated by jOOQ") @java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class Tasks extends org.jooq.impl.SchemaImpl { - private static final long serialVersionUID = 1527826656; + private static final long serialVersionUID = -1373269979; /** * The singleton instance of tasks diff --git a/samples/play-jooq-sample/app/models/generated/mysql/tables/Task.java b/samples/play-jooq-sample/app/models/generated/mysql/tables/Task.java index e763ac8..e150970 100644 --- a/samples/play-jooq-sample/app/models/generated/mysql/tables/Task.java +++ b/samples/play-jooq-sample/app/models/generated/mysql/tables/Task.java @@ -6,12 +6,12 @@ /** * This class is generated by jOOQ. */ -@javax.annotation.Generated(value = { "http://www.jooq.org", "3.1.0" }, +@javax.annotation.Generated(value = { "http://www.jooq.org", "3.4.2" }, comments = "This class is generated by jOOQ") @java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class Task extends org.jooq.impl.TableImpl { - private static final long serialVersionUID = -1375802672; + private static final long serialVersionUID = 1634114787; /** * The singleton instance of tasks.task @@ -27,27 +27,35 @@ public java.lang.Class getReco } /** - * The column tasks.task.id. + * The column tasks.task.id. */ - public final org.jooq.TableField ID = createField("id", org.jooq.impl.SQLDataType.BIGINT, this); + public final org.jooq.TableField ID = createField("id", org.jooq.impl.SQLDataType.BIGINT.nullable(false), this, ""); /** - * The column tasks.task.label. + * The column tasks.task.label. */ - public final org.jooq.TableField LABEL = createField("label", org.jooq.impl.SQLDataType.VARCHAR.length(255), this); + public final org.jooq.TableField LABEL = createField("label", org.jooq.impl.SQLDataType.VARCHAR.length(255), this, ""); /** * Create a tasks.task table reference */ public Task() { - super("task", models.generated.mysql.Tasks.TASKS); + this("task", null); } /** * Create an aliased tasks.task table reference */ public Task(java.lang.String alias) { - super(alias, models.generated.mysql.Tasks.TASKS, models.generated.mysql.tables.Task.TASK); + this(alias, models.generated.mysql.tables.Task.TASK); + } + + private Task(java.lang.String alias, org.jooq.Table aliased) { + this(alias, aliased, null); + } + + private Task(java.lang.String alias, org.jooq.Table aliased, org.jooq.Field[] parameters) { + super(alias, models.generated.mysql.Tasks.TASKS, aliased, parameters, ""); } /** @@ -79,6 +87,13 @@ public java.util.List implements org.jooq.Record2 { - private static final long serialVersionUID = 1629893567; + private static final long serialVersionUID = -1572111507; /** - * Setter for tasks.task.id. + * Setter for tasks.task.id. */ public void setId(java.lang.Long value) { setValue(0, value); } /** - * Getter for tasks.task.id. + * Getter for tasks.task.id. */ public java.lang.Long getId() { return (java.lang.Long) getValue(0); } /** - * Setter for tasks.task.label. + * Setter for tasks.task.label. */ public void setLabel(java.lang.String value) { setValue(1, value); } /** - * Getter for tasks.task.label. + * Getter for tasks.task.label. */ public java.lang.String getLabel() { return (java.lang.String) getValue(1); @@ -105,6 +105,32 @@ public java.lang.String value2() { return getLabel(); } + /** + * {@inheritDoc} + */ + @Override + public TaskRecord value1(java.lang.Long value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TaskRecord value2(java.lang.String value) { + setLabel(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TaskRecord values(java.lang.Long value1, java.lang.String value2) { + return this; + } + // ------------------------------------------------------------------------- // Constructors // ------------------------------------------------------------------------- @@ -115,4 +141,14 @@ public java.lang.String value2() { public TaskRecord() { super(models.generated.mysql.tables.Task.TASK); } + + /** + * Create a detached, initialised TaskRecord + */ + public TaskRecord(java.lang.Long id, java.lang.String label) { + super(models.generated.mysql.tables.Task.TASK); + + setValue(0, id); + setValue(1, label); + } } diff --git a/samples/play-jooq-sample/app/views/index.scala.html b/samples/play-jooq-sample/app/views/index.scala.html index 35166ce..d7d8705 100644 --- a/samples/play-jooq-sample/app/views/index.scala.html +++ b/samples/play-jooq-sample/app/views/index.scala.html @@ -2,7 +2,7 @@ @main("Task list") { -

@tasks.size() task(s)

+

@tasks.size task(s)

    @for(task <- tasks) { diff --git a/samples/play-jooq-sample/build.sbt b/samples/play-jooq-sample/build.sbt new file mode 100644 index 0000000..f134c5f --- /dev/null +++ b/samples/play-jooq-sample/build.sbt @@ -0,0 +1,20 @@ +name := """play-scala""" + +version := "1.0-SNAPSHOT" + +lazy val root = (project in file(".")).enablePlugins(PlayScala) + +scalaVersion := "2.11.2" + +libraryDependencies ++= Seq( + javaJdbc, + javaEbean, + cache, + javaWs, + "com.google.inject" % "guice" % "3.0", + "mysql" % "mysql-connector-java" % "5.1.18", + "org.jooq" %% "play-jooq" % "1.0-SNAPSHOT", + "org.jooq" % "jooq" % "3.4.2", + "org.jooq" % "jooq-meta" % "3.4.2", + "org.jooq" % "jooq-codegen" % "3.4.2" +) diff --git a/samples/play-jooq-sample/project/Build.scala b/samples/play-jooq-sample/project/Build.scala deleted file mode 100644 index f68187d..0000000 --- a/samples/play-jooq-sample/project/Build.scala +++ /dev/null @@ -1,29 +0,0 @@ -import sbt._ -import Keys._ -import play.Project._ - -object ApplicationBuild extends Build { - - val appName = "play-jooq-sample" - val appVersion = "1.0-SNAPSHOT" - - val appDependencies = Seq( - // Add your project dependencies here, - javaCore, - javaJdbc, - javaEbean, - - "com.google.inject" % "guice" % "3.0", - "mysql" % "mysql-connector-java" % "5.1.18", - - "org.jooq" %% "play-jooq" % "1.0-SNAPSHOT", - "org.jooq" % "jooq" % "3.1.0", - "org.jooq" % "jooq-meta" % "3.1.0", - "org.jooq" % "jooq-codegen" % "3.1.0" - ) - - val main = play.Project(appName, appVersion, appDependencies).settings( - // Add your own project settings here - ) - -} diff --git a/samples/play-jooq-sample/project/build.properties b/samples/play-jooq-sample/project/build.properties index 0974fce..be6c454 100644 --- a/samples/play-jooq-sample/project/build.properties +++ b/samples/play-jooq-sample/project/build.properties @@ -1 +1 @@ -sbt.version=0.13.0 +sbt.version=0.13.5 diff --git a/samples/play-jooq-sample/project/plugins.sbt b/samples/play-jooq-sample/project/plugins.sbt index 0f65c81..e14fc6d 100644 --- a/samples/play-jooq-sample/project/plugins.sbt +++ b/samples/play-jooq-sample/project/plugins.sbt @@ -5,4 +5,4 @@ logLevel := Level.Warn resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/" // Use the Play sbt plugin for Play projects -addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.0") +addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.4")