summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorJean Helou <jhe@codamens.fr>2019-03-02 21:44:50 +0100
committerTobias Roeser <le.petit.fou@web.de>2019-03-11 07:41:03 +0100
commit3387177b04bea45784685cf6a6bd9cb13cf753da (patch)
tree9eae0521b5780ea0ae7e60a034ff8563a6470013 /contrib
parentc448bd3ef72d06da8ae079058e27f45d5d1be147 (diff)
downloadmill-3387177b04bea45784685cf6a6bd9cb13cf753da.tar.gz
mill-3387177b04bea45784685cf6a6bd9cb13cf753da.tar.bz2
mill-3387177b04bea45784685cf6a6bd9cb13cf753da.zip
Extracts static asset and webjar handling to a specific trait
Diffstat (limited to 'contrib')
-rw-r--r--contrib/playlib/src/mill/playlib/PlayModule.scala103
-rw-r--r--contrib/playlib/src/mill/playlib/Static.scala99
-rw-r--r--contrib/playlib/test/src/mill/playlib/PlaySingleApiModuleTests.scala2
3 files changed, 101 insertions, 103 deletions
diff --git a/contrib/playlib/src/mill/playlib/PlayModule.scala b/contrib/playlib/src/mill/playlib/PlayModule.scala
index 563bbd1c..10b6d40d 100644
--- a/contrib/playlib/src/mill/playlib/PlayModule.scala
+++ b/contrib/playlib/src/mill/playlib/PlayModule.scala
@@ -1,19 +1,7 @@
package mill
package playlib
-import java.net.URI
-import java.nio.file.FileSystems
-import java.nio.file.FileVisitOption
-import java.nio.file.FileVisitResult
-import java.nio.file.Files
-import java.nio.file.Path
-import java.nio.file.SimpleFileVisitor
-import java.nio.file.attribute.BasicFileAttributes
-import java.util
-
-import mill.PathRef
import mill.scalalib._
-import scala.collection.JavaConverters._
import api.Versions
@@ -31,96 +19,7 @@ trait PlayApiModule extends Dependencies with Router with Server{
override def sources = T.sources{ millSourcePath }
}
- /**
- * project resources including configuration, webjars and static assets
- */
- def resources = T.sources {
- super.resources() :+ webJarResources() :+ staticAssets()
- }
-
- /**
- * Resource base path of packaged assets (path they will appear in in the jar)
- */
- def assetsPath = T{ "public" }
-
- /**
- * Directories to include assets from
- */
- def assetSources = T.sources{ millSourcePath / 'public }
-
- /*
- Collected static assets for the project
- */
- def staticAssets = T {
- val toPath = os.Path(assetsPath(), T.ctx().dest)
- assetSources().foreach{ pathRef =>
- val fromPath = pathRef.path
- if (os.isDir(fromPath)) {
- os.walk(fromPath).filter(os.isFile(_)).foreach{ p =>
- os.copy(p, toPath / p.relativeTo(fromPath), createFolders = true)
- }
- }
- }
- PathRef(T.ctx().dest)
- }
-
- /**
- * webjar dependencies - created from transitive ivy deps
- */
- def webJarDeps = T{
- transitiveIvyDeps().filter(_.dep.module.organization == "org.webjars")
- }
-
- /**
- * jar files of web jars
- */
- def webJars = T{
- Lib.resolveDependencies(repositories, Lib.depToDependency(_, scalaVersion()), webJarDeps())
- }
-
- /**
- * webjar resources extracted from their source jars with version from path removed
- */
- def webJarResources = T {
- extractWebJars(webJars().toSeq, os.Path(assetsPath(), T.ctx().dest) / 'lib)
- PathRef(T.ctx().dest)
- }
-
-
def start(args: String*) = T.command{ run(args:_*) }
-
- def extractWebJars(jars: Seq[PathRef], webJarBase: os.Path): Unit = {
- val prefix = "/META-INF/resources/webjars/"
-
- jars.foreach{ jarRef =>
- val uri = s"jar:file:${jarRef.path}"
- val env = Map.empty[String,String].asJava
-
- val zipFs = FileSystems.newFileSystem(URI.create(uri), env)
- try {
- for(root <- zipFs.getRootDirectories.asScala) {
- Files.walkFileTree(root, util.EnumSet.noneOf(classOf[FileVisitOption]), Int.MaxValue,
- new SimpleFileVisitor[Path] {
- override def visitFile(file: Path, attrs: BasicFileAttributes) = {
- if (file.startsWith(prefix)) {
- val rel = os.RelPath(file.toString.substring(prefix.length))
- val toFile = webJarBase / os.RelPath(rel.segments(0) +: rel.segments.drop(2), 0)
- //println(s"$file -> $toFile")
- os.makeDir.all(toFile / os.up)
- Files.copy(file, toFile.toNIO)
- }
- FileVisitResult.CONTINUE
- }
- }
- )
- }
- }
- finally {
- zipFs.close()
- }
- }
- }
-
}
-trait PlayModule extends PlayApiModule with Twirl
+trait PlayModule extends PlayApiModule with Static with Twirl
diff --git a/contrib/playlib/src/mill/playlib/Static.scala b/contrib/playlib/src/mill/playlib/Static.scala
new file mode 100644
index 00000000..e6cd7779
--- /dev/null
+++ b/contrib/playlib/src/mill/playlib/Static.scala
@@ -0,0 +1,99 @@
+package mill.playlib
+
+import java.net.URI
+import java.nio.file._
+import java.nio.file.attribute.BasicFileAttributes
+import java.util
+
+import mill.{PathRef, T}
+import mill.scalalib.{Lib, ScalaModule}
+
+trait Static extends ScalaModule {
+ /**
+ * project resources including configuration, webjars and static assets
+ */
+ override def resources = T.sources {
+ super.resources() :+ webJarResources() :+ staticAssets()
+ }
+
+ /**
+ * Resource base path of packaged assets (path they will appear in in the jar)
+ */
+ def assetsPath = T{ "public" }
+
+ /**
+ * Directories to include assets from
+ */
+ def assetSources = T.sources{ millSourcePath / assetsPath() }
+
+ /*
+ Collected static assets for the project
+ */
+ def staticAssets = T {
+ val toPath = os.Path(assetsPath(), T.ctx().dest)
+ assetSources().foreach{ pathRef =>
+ val fromPath = pathRef.path
+ if (os.isDir(fromPath)) {
+ os.walk(fromPath).filter(os.isFile(_)).foreach{ p =>
+ os.copy(p, toPath / p.relativeTo(fromPath), createFolders = true)
+ }
+ }
+ }
+ PathRef(T.ctx().dest)
+ }
+
+ /**
+ * webjar dependencies - created from transitive ivy deps
+ */
+ def webJarDeps = T{
+ transitiveIvyDeps().filter(_.dep.module.organization == "org.webjars")
+ }
+
+ /**
+ * jar files of web jars
+ */
+ def webJars = T{
+ Lib.resolveDependencies(repositories, Lib.depToDependency(_, scalaVersion()), webJarDeps())
+ }
+
+ /**
+ * webjar resources extracted from their source jars with version from path removed
+ */
+ def webJarResources = T {
+ extractWebJars(webJars().toSeq, os.Path(assetsPath(), T.ctx().dest) / 'lib)
+ PathRef(T.ctx().dest)
+ }
+
+ private def extractWebJars(jars: Seq[PathRef], webJarBase: os.Path): Unit = {
+ import scala.collection.JavaConverters._
+ val prefix = "/META-INF/resources/webjars/"
+
+ jars.foreach{ jarRef =>
+ val uri = s"jar:file:${jarRef.path}"
+ val env = Map.empty[String,String].asJava
+
+ val zipFs = FileSystems.newFileSystem(URI.create(uri), env)
+ try {
+ for(root <- zipFs.getRootDirectories.asScala) {
+ Files.walkFileTree(root, util.EnumSet.noneOf(classOf[FileVisitOption]), Int.MaxValue,
+ new SimpleFileVisitor[Path] {
+ override def visitFile(file: Path, attrs: BasicFileAttributes) = {
+ if (file.startsWith(prefix)) {
+ val rel = os.RelPath(file.toString.substring(prefix.length))
+ val toFile = webJarBase / os.RelPath(rel.segments(0) +: rel.segments.drop(2), 0)
+ //println(s"$file -> $toFile")
+ os.makeDir.all(toFile / os.up)
+ Files.copy(file, toFile.toNIO)
+ }
+ FileVisitResult.CONTINUE
+ }
+ }
+ )
+ }
+ }
+ finally {
+ zipFs.close()
+ }
+ }
+ }
+}
diff --git a/contrib/playlib/test/src/mill/playlib/PlaySingleApiModuleTests.scala b/contrib/playlib/test/src/mill/playlib/PlaySingleApiModuleTests.scala
index 0171dbe9..df69ca83 100644
--- a/contrib/playlib/test/src/mill/playlib/PlaySingleApiModuleTests.scala
+++ b/contrib/playlib/test/src/mill/playlib/PlaySingleApiModuleTests.scala
@@ -50,7 +50,7 @@ object PlaySingleApiModuleTests extends TestSuite {
conf.map(_.path.relativeTo(playsingleapi.millSourcePath).toString()) == Seq("conf"),
app.map(_.path.relativeTo(playsingleapi.millSourcePath).toString()) == Seq("app"),
sources== app,
- resources.map(_.path.relativeTo(playsingleapi.millSourcePath).toString()).contains("conf"),
+ resources== conf,
testSources.map(_.path.relativeTo(playsingleapi.millSourcePath).toString()) == Seq("test"),
testResources.map(_.path.relativeTo(playsingleapi.millSourcePath).toString()) == Seq("test/resources")
)