play项目加插件
因此,您已经为Play编写了一个插件……确定可以正常工作吗?
最近,我一直对Deadbolt表示爱意,作为工作的一部分,我添加了一个用于功能测试的测试应用程序。 这是一个使用Deadbolt所有功能的应用程序,由REST-Assured进行的HTTP调用驱动。 最初,它基于Play 2.3.5,但是它忽略了2.3.1到2.3.4的受支持Play版本。 此外,Typesafe Play团队的那些努力工作的人会不断探索新的功能丰富的版本。
最重要的是,需要对Scala 2.10.4和2.11.1的支持,因此需要跨Scala版本测试。
显然,仅针对Play的单个版本测试插件是不够的。 似乎某种持续集成可以在这里帮助我们……
在Travis CI上构建
Deadbolt建立在Travis CI的基础上, Travis CI是一个出色的CI平台,对开源项目免费提供。 这将运行测试,并将快照版本发布到Sonatype。 我不会对此进行详细介绍,因为Cake Solutions已经提供了很好的指南。 您可以在此处找到该指南: http : //www.cakesolutions.net/teamblogs/publishing-artefacts-to-oss-sonatype-nexus-using-sbt-and-travis-ci-此处...
我对构建脚本进行了一些更改,因为插件代码不在存储库的顶层。 相反,它位于下一层。 存储库如下所示:
deadbolt-2-java
|-code # plugin code lives here
|-test-app # the functional test application
结果,定义构建的.travis.yml文件如下所示。
language: scala
jdk:
- openjdk6
scala:
- 2.11.1
script:
- cd code
- sbt ++$TRAVIS_SCALA_VERSION +test
- cd ../test-app
- sbt ++$TRAVIS_SCALA_VERSION +test
- cd ../code
- sbt ++$TRAVIS_SCALA_VERSION +publish-local
after_success:
- ! '[[ $TRAVIS_BRANCH == "master" ]] && { sbt +publish; };'
env:
global:
- secure: foo
- secure: bar
这将设置Java版本(当我不提供与Java 6兼容的版本时,人们会很生气),并将脚本定义为构建过程。 请注意用于在插件目录和test-app目录之间切换的cd
命令。
该脚本已经满足了跨Scala版本的要求-在命令前面加上+,例如+test
,将针对您build.sbt中定义的所有Scala版本执行该命令。 重要的是要注意,尽管在.travis.yml中仅定义了Scala 2.11.1,但SBT本身将负责根据build.sbt设置当前的构建版本。
crossScalaVersions := Seq("2.11.1", "2.10.4")
测试Play的多个版本
但是,在test-app / project / plugins.sbt中,test-app使用的Play版本仍被硬编码为2.3.5。
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.5")
令人高兴的是,.sbt文件不仅是配置文件,而且是实际的代码。 这意味着我们可以根据环境属性更改Play版本。 给出了默认值2.3.5,以允许测试在本地运行而无需设置版本。
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % System.getProperty("playTestVersion", "2.3.5"))
最后,我们更新.travis.yml以利用这一点。
language: scala
jdk:
- openjdk6
scala:
- 2.11.1
script:
- cd code
- sbt ++$TRAVIS_SCALA_VERSION +test
- cd ../test-app
- sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion=2.3.1 +test
- sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion=2.3.2 +test
- sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion=2.3.3 +test
- sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion=2.3.4 +test
- sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion=2.3.5 +test
- cd ../code
- sbt ++$TRAVIS_SCALA_VERSION +publish-local
after_success:
- ! '[[ $TRAVIS_BRANCH == "master" ]] && { sbt +publish; };'
env:
global:
- secure: foo
- secure: bar
这意味着在构建过程中将执行以下步骤:
- sbt ++ $ TRAVIS_SCALA_VERSION +测试
- 针对Scala 2.11.1运行插件测试
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.1 +测试
- 针对Scala 2.11.1和Play 2.3.1运行test-app的功能测试
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.2 +测试
- 针对Scala 2.11.1和Play 2.3.2运行test-app的功能测试
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.3 +测试
- 针对Scala 2.11.1和Play 2.3.3运行test-app的功能测试
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.4 +测试
- 针对Scala 2.11.1和Play 2.3.4运行test-app的功能测试
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.5 +测试
- 针对Scala 2.11.1和Play 2.3.5运行test-app的功能测试
如果所有这些步骤都通过,将执行构建脚本的after_success
分支。 如果任何步骤失败,则构建将中断并且快照将不会发布。
- 您可以在这里使用这种方法查看存储库: https : //github.com/schaloner/deadbolt-2-java 。
- 生成的Travis构建可在以下位置找到: https : //travis-ci.org/schaloner/deadbolt-2-java 。
翻译自: https://www.javacodegeeks.com/2014/10/testing-your-plugin-with-multiple-version-of-play.html
play项目加插件