LoginSignup
2

More than 5 years have passed since last update.

Gradle/SBTでAdminLTEを管理する

Posted at

概要

もともと独自タスクで定義していたものを WebJars に置き換えました。

各ビルドツールの使用バージョンは以下のとおりです。

  • Gradle : 3.2.1
  • SBT : 0.13.11

Gradle(独自タスク)

build.gradle
task downloadAdminLTECssFontsJs << {
    def staticDirPath = 'src/main/resources/static'
    def workDirPath = 'work'

    // Delete Work Directory
    clearDir("${workDirPath}")
    // Bootstrap & AdminLTE Dashboard & Control Panel Template
    downloadAdminLTE("2.3.8", "2.2.3", "${workDirPath}", "${staticDirPath}")
    // Font Awesome Icons
    downloadFontAwesome("4.7.0", "${workDirPath}", "${staticDirPath}")
    // Ionicons
    downloadIonicons("2.0.1", "${workDirPath}", "${staticDirPath}")
    // html5shiv.js
    downloadHtml5shivJs("3.7.3", "${workDirPath}", "${staticDirPath}")
    // respond.min.js
    downloadRespondMinJs("1.4.2", "${workDirPath}", "${staticDirPath}")
    // Delete Work Directory
    clearDir("${workDirPath}")
}


void clearDir(String dirPath) {
    delete dirPath
}
void downloadAdminLTE(String adminLTEVersion, String jQueryVersion, String workDirPath, String staticDirPath) {
    download {
        src "https://codeload.github.com/almasaeed2010/AdminLTE/zip/v${adminLTEVersion}"
        dest new File("${workDirPath}/download/AdminLTE-${adminLTEVersion}.zip")
    }
    copy {
        from zipTree("${workDirPath}/download/AdminLTE-${adminLTEVersion}.zip")
        into "${workDirPath}/unzip"
    }
    copy {
        from "${workDirPath}/unzip/AdminLTE-${adminLTEVersion}/bootstrap/css"
        into "${staticDirPath}/css"
    }
    copy {
        from "${workDirPath}/unzip/AdminLTE-${adminLTEVersion}/bootstrap/fonts"
        into "${staticDirPath}/fonts"
    }
    copy {
        from "${workDirPath}/unzip/AdminLTE-${adminLTEVersion}/bootstrap/js"
        into "${staticDirPath}/js"
    }
    copy {
        from "${workDirPath}/unzip/AdminLTE-${adminLTEVersion}/dist/css"
        into "${staticDirPath}/css"
    }
    copy {
        from "${workDirPath}/unzip/AdminLTE-${adminLTEVersion}/dist/img"
        into "${staticDirPath}/img"
    }
    copy {
        from "${workDirPath}/unzip/AdminLTE-${adminLTEVersion}/dist/js"
        into "${staticDirPath}/js"
    }
    copy {
        from "${workDirPath}/unzip/AdminLTE-${adminLTEVersion}/plugins/jQuery/jquery-${jQueryVersion}.min.js"
        into "${staticDirPath}/js"
    }
    copy {
        from "${workDirPath}/unzip/AdminLTE-${adminLTEVersion}/plugins"
        into "${staticDirPath}/plugins"
    }
    delete "${staticDirPath}/js/pages"
    delete "${staticDirPath}/js/demo.js"
    delete "${staticDirPath}/plugins/jQuery"
}
void downloadFontAwesome(String fontAwesomeVersion, String workDirPath, String staticDirPath) {
    download {
        src "http://fortawesome.github.io/Font-Awesome/assets/font-awesome-${fontAwesomeVersion}.zip"
        dest new File("${workDirPath}/download/font-awesome-${fontAwesomeVersion}.zip")
    }
    copy {
        from zipTree("${workDirPath}/download/font-awesome-${fontAwesomeVersion}.zip")
        into "${workDirPath}/unzip"
    }
    copy {
        from "${workDirPath}/unzip/font-awesome-${fontAwesomeVersion}/css/font-awesome.min.css"
        into "${staticDirPath}/css"
    }
    copy {
        from "${workDirPath}/unzip/font-awesome-${fontAwesomeVersion}/fonts"
        into "${staticDirPath}/fonts"
    }
}
void downloadIonicons(String ioniconsVersion, String workDirPath, String staticDirPath) {
    download {
        src "https://codeload.github.com/driftyco/ionicons/zip/v${ioniconsVersion}"
        dest new File("${workDirPath}/download/ionicons-${ioniconsVersion}.zip")
    }
    copy {
        from zipTree("${workDirPath}/download/ionicons-${ioniconsVersion}.zip")
        into "${workDirPath}/unzip"
    }
    copy {
        from "${workDirPath}/unzip/ionicons-${ioniconsVersion}/css/ionicons.min.css"
        into "${staticDirPath}/css"
    }
    copy {
        from "${workDirPath}/unzip/ionicons-${ioniconsVersion}/fonts"
        into "${staticDirPath}/fonts"
    }
}
void downloadHtml5shivJs(String html5shivJsVersion, String workDirPath, String staticDirPath) {
    download {
        src "https://oss.maxcdn.com/html5shiv/${html5shivJsVersion}/html5shiv.min.js"
        dest new File("${workDirPath}/download/html5shiv.min.js")
    }
    copy {
        from "${workDirPath}/download/html5shiv.min.js"
        into "${staticDirPath}/js"
    }
}
void downloadRespondMinJs(String respondMinJsVersion, String workDirPath, String staticDirPath) {
    download {
        src "https://oss.maxcdn.com/respond/${respondMinJsVersion}/respond.min.js"
        dest new File("${workDirPath}/download/respond.min.js")
    }
    copy {
        from "${workDirPath}/download/respond.min.js"
        into "${staticDirPath}/js"
    }
}

SBT(独自タスク)

build.sbt
lazy val downloadAdminLTECssFontsJs = taskKey[Unit]("Download AdminLTE Template.")

downloadAdminLTECssFontsJs := {
  val staticDir = file("public")
  val workDir = file("work")
  println("AdminLTE Downloading...")

  // Delete Work Directory
  cleanDir(workDir)
  cleanDir(staticDir)
  // Bootstrap & AdminLTE Dashboard & Control Panel Template
  downloadAdminLTE("2.3.8","2.2.3",workDir,staticDir)
  // Font Awesome Icons
  downloadFontAwesome("4.7.0",workDir,staticDir)
  // Ionicons
  downloadIonicons("2.0.1",workDir,staticDir)
  // html5shiv.js
  downloadHtml5shivJs("3.7.3",workDir,staticDir)
  // respond.min.js
  downloadRespondMinJs("1.4.2",workDir,staticDir)
  // Delete Work Directory
  cleanDir(workDir)

  println("AdminLTE Download Done.")
}

def cleanDir(dir: File) = IO.delete(dir)
def downloadAdminLTE(adminLTEVersion: String, jQueryVersion: String, workDir: File, staticDir: File) = {
  IO.unzipURL(new URL(s"https://codeload.github.com/almasaeed2010/AdminLTE/zip/v${adminLTEVersion}"),workDir/"unzip")
  IO.copyDirectory(workDir/s"unzip/AdminLTE-${adminLTEVersion}/bootstrap/css",staticDir/"css")
  IO.copyDirectory(workDir/s"unzip/AdminLTE-${adminLTEVersion}/bootstrap/fonts",staticDir/"fonts")
  IO.copyDirectory(workDir/s"unzip/AdminLTE-${adminLTEVersion}/bootstrap/js",staticDir/"js")
  IO.copyDirectory(workDir/s"unzip/AdminLTE-${adminLTEVersion}/dist/css",staticDir/"css")
  IO.copyDirectory(workDir/s"unzip/AdminLTE-${adminLTEVersion}/dist/img",staticDir/"img")
  IO.copyDirectory(workDir/s"unzip/AdminLTE-${adminLTEVersion}/dist/js",staticDir/"js")
  IO.copyFile(workDir/s"unzip/AdminLTE-${adminLTEVersion}/plugins/jQuery/jquery-${jQueryVersion}.min.js",staticDir/s"js/jquery-${jQueryVersion}.min.js")
  IO.copyDirectory(workDir/s"unzip/AdminLTE-${adminLTEVersion}/plugins",staticDir/"plugins")
  IO.delete(staticDir/"js/pages")
  IO.delete(staticDir/"js/demo.js")
  IO.delete(staticDir/"js/plugins/jQuery")
}
def downloadFontAwesome(fontAwesomeVersion: String, workDir: File, staticDir: File) = {
  IO.unzipURL(new URL(s"http://fortawesome.github.io/Font-Awesome/assets/font-awesome-${fontAwesomeVersion}.zip"),workDir/"unzip")
  IO.copyFile(workDir/s"unzip/font-awesome-${fontAwesomeVersion}/css/font-awesome.min.css",staticDir/"css/font-awesome.min.css")
  IO.copyDirectory(workDir/s"unzip/font-awesome-${fontAwesomeVersion}/fonts",staticDir/"fonts")
}
def downloadIonicons(ioniconsVersion: String, workDir: File, staticDir: File) {
  IO.unzipURL(new URL(s"https://codeload.github.com/driftyco/ionicons/zip/v${ioniconsVersion}"),workDir/"unzip")
  IO.copyFile(workDir/s"unzip/ionicons-${ioniconsVersion}/css/ionicons.min.css",staticDir/"css/ionicons.min.css")
  IO.copyDirectory(workDir/s"unzip/ionicons-${ioniconsVersion}/fonts",staticDir/"fonts")
}
def downloadHtml5shivJs(html5shivJsVersion: String, workDir: File, staticDir: File) {
  IO.download(new URL(s"https://oss.maxcdn.com/html5shiv/${html5shivJsVersion}/html5shiv.min.js"),workDir/"download/html5shiv.min.js")
  IO.copyFile(workDir/"download/html5shiv.min.js",staticDir/"js/html5shiv.min.js")
}
def downloadRespondMinJs(respondMinJsVersion: String,  workDir: File, staticDir: File) {
  IO.download(new URL(s"https://oss.maxcdn.com/respond/${respondMinJsVersion}/respond.min.js"),workDir/"download/respond.min.js")
  IO.copyFile(workDir/"download/respond.min.js",staticDir/"js/respond.min.js")
}

WebJarsを使った場合

build.sbt
libraryDependencies ++= Seq(
  "org.webjars" %% "webjars-play" % "2.5.0",
  "org.webjars" % "AdminLTE" % "2.3.8",
  "org.webjars" % "font-awesome" % "4.7.0",
  "org.webjars" % "ionicons" % "2.0.1",
  "org.webjars" % "html5shiv" % "3.7.3",
  "org.webjars" % "respond" % "1.4.2"
)

SBTだけでなく、Maven・Gradleなどのビルドツールでも使用可能です。
※詳しくはドキュメントを参照下さい

参考

WebJars
sbt.IO ドキュメント
Gradleの独自タスクで参考にさせて頂いたもの

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2