|
Play Framework/Scala example source code file (PlayDocsPlugin.scala)
The PlayDocsPlugin.scala Play Framework example source code/* * Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com> */ package com.typesafe.play.docs.sbtplugin import java.util.jar.JarFile import com.typesafe.play.docs.sbtplugin.PlayDocsValidation.MarkdownReport import play.core.BuildDocHandler import play.core.server.ServerWithStop import play.sbtplugin.Colors import sbt.Keys._ import sbt._ import sbt.plugins.JvmPlugin object Imports { object PlayDocsKeys { val fallbackToJar = SettingKey[Boolean]("play-docs-fallback-to-jar", "Whether the docs should fallback to loading things from the jar", KeyRanks.CSetting) val manualPath = SettingKey[File]("play-docs-manual-path", "The location of the manual", KeyRanks.CSetting) val validateDocs = TaskKey[Unit]("validate-docs", "Validates the play docs to ensure they compile and that all links resolve.", KeyRanks.APlusTask) val generateMarkdownReport = TaskKey[MarkdownReport]("generate-markdown-report", "Parses all markdown files and generates a report", KeyRanks.CTask) val validateExternalLinks = TaskKey[Seq[String]]("validate-external-links", "Validates that all the external links are valid, by checking that they return 200.", KeyRanks.APlusTask) } } object PlayDocsPlugin extends AutoPlugin { import Imports.PlayDocsKeys._ def autoImport = Imports override def trigger = NoTrigger override def requires = JvmPlugin override def projectSettings = Seq( fallbackToJar := true, manualPath := baseDirectory.value, run <<= docsRunSetting, generateMarkdownReport <<= PlayDocsValidation.generateMarkdownReportTask, validateDocs <<= PlayDocsValidation.validateDocsTask, validateExternalLinks <<= PlayDocsValidation.validateExternalLinksTask, libraryDependencies += "com.typesafe.play" %% "play-docs" % play.core.PlayVersion.current ) // Run a documentation server val docsRunSetting: Def.Initialize[InputTask[Unit]] = Def.inputTask { val args = Def.spaceDelimited().parsed val port = args.headOption.map(_.toInt).getOrElse(9000) val classpath: Seq[Attributed[File]] = (dependencyClasspath in Test).value // Get classloader val sbtLoader = this.getClass.getClassLoader val classloader = new java.net.URLClassLoader(classpath.map(_.data.toURI.toURL).toArray, null /* important here, don't depend of the sbt classLoader! */) { override def loadClass(name: String): Class[_] = { if (play.core.classloader.DelegatingClassLoader.isSharedClass(name)) { sbtLoader.loadClass(name) } else { super.loadClass(name) } } } val docsJarFile = { val f = classpath.map(_.data).filter(_.getName.startsWith("play-docs")).head new JarFile(f) } val buildDocHandler = { val docHandlerFactoryClass = classloader.loadClass("play.docs.BuildDocHandlerFactory") val fromDirectoryMethod = docHandlerFactoryClass.getMethod("fromDirectoryAndJar", classOf[java.io.File], classOf[JarFile], classOf[String], classOf[Boolean]) fromDirectoryMethod.invoke(null, manualPath.value, docsJarFile, "play/docs/content", fallbackToJar.value: java.lang.Boolean) } val clazz = classloader.loadClass("play.docs.DocumentationServer") val constructor = clazz.getConstructor(classOf[File], classOf[BuildDocHandler], classOf[java.lang.Integer]) val server = constructor.newInstance(manualPath.value, buildDocHandler, new java.lang.Integer(port)).asInstanceOf[ServerWithStop] println() println(Colors.green("Documentation server started, you can now view the docs by going to http://" + server.mainAddress())) println() waitForKey() server.stop() } private lazy val consoleReader = { val cr = new jline.console.ConsoleReader // Because jline, whenever you create a new console reader, turns echo off. Stupid thing. cr.getTerminal.setEchoEnabled(true) cr } private def waitForKey() = { consoleReader.getTerminal.setEchoEnabled(false) def waitEOF() { consoleReader.readCharacter() match { case 4 => // STOP case 11 => consoleReader.clearScreen(); waitEOF() case 10 => println(); waitEOF() case _ => waitEOF() } } waitEOF() consoleReader.getTerminal.setEchoEnabled(true) } } Other Play Framework source code examplesHere is a short list of links related to this Play Framework PlayDocsPlugin.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.