sbt-coursier.md あなたの sbt update を爆速にする sbt-coursier の紹介 この記事は Scala Advent Calendar 2016(Adventar) 10日目の記事です。 今は 12/10 の 625時です。年明けなんて無かった。いいね? さてさて、sbt の依存jarのダウンロードが遅い、というのは割とよく言われる事であります。 で、この原因の一旦に、sbtが Apache Ivy を使っている、という点があります。 現状 Ivy は依存jarをダウンロードする際、全て直列でダウンロードします。依存グラフ的に関係のないライブラリがあっても、一つが終わらない限り別のjarをダウンロードしようとはしません。 ファイルIOもネットワーク通信も多重化できるこの時代にこれはいけません。 そこで Coursier の紹介です。 Coursier は S
PlayFramework2.3でactivator runしたときにgulpも起動する方法です。 元ネタはPlay Framework で開発用Webサーバと同時に grunt/gulp を起動する - はこべブログ ♨ですが、こちらの記事の方法では、Playの2.3からplay.Project.playScalaSettingsが無くなったので、うまく動きませんでした。 いろいろ調べてみたら、build.sbtでimport play.PlayImport.PlayKeys.playRunHooksしたら動きました。 name := """new-ui""" version := "1.0-SNAPSHOT" lazy val root = (project in file(".")).enablePlugins(PlayScala) scalaVersion := "2.11.6"
開発環境のassetsとプロダクション環境のassetsでは含めるファイルが変わってくることがあります。sourcemapはプロダクションには不要ですし、プロダクションのassetsでは、JSやCSSはminifyすることがあります。 sbt-webでこれらが完結していればその仕組を使って管理できますが、ビルドのassetsに含めるファイルを、Webpack・gulp・MakefileなどCLIツールを使って生成している場合、activator distの前に何らかのシェルコマンドを実行する必要があります。 これを実現するためのbuild.sbtは次のようになります。 lazy val buildAssetsWithCLI = taskKey[Unit]("Build assets files using CLI tools") buildAssetsWithCLI := { "make
ChatWork 技術部の小崎です。 ScalaMatsuri 2014のLT募集に落ちてしまったので一足先にそのネタの公開です。 Scalaエンジニアの皆さんはCIをどうされていますか? 私がScalaでのCIについて調べるとscalatestやspecsでテストをするという話や、scalariformコードをフォーマットするという話ぐらいで、CIでどういった開発サイクルを回しているのか、なかなか参考になる話がありませんでした。 せめて、定番的なsbtプラグインの紹介でもあれば、開発サイクルを考える手助けになるのですが・・・。 という訳で調べました。 GitHubでStarが100以上のScalaプロジェクト、全171リポジトリ、90プラグインから10リポジトリ以上使われているsbtプラグインを紹介します。 56 repository, sbt-pgp sbt-pgp - https:/
sbt でわからないことがある場合、だいたい wiki をみる sbtのドキュメントはgithubのwikiからscala-sbt.orgに移りました! ソースを読む メーリングリストで質問する StackOverflowで検索 or 質問 というような選択肢になります。*1 それで、英語が微妙な自分の場合、結局ソースをみることが多いわけです。それで、今までそれなりにsbtのソースを読んでいるので、自分なりに思った sbtのソースのどこから読めばいいのか? 全体としてどういう構成になっているのか? をちょっと書いてみようかと思います。 (そろそろsbt0.12が出るはずですが)このblog書いている時点の安定版であるsbt0.11.2を基準にして書きます。まぁこれから書くようなことは、sbt0.12になってもあまり変わらないはずです。 1. まず Keys.scala 読め https:/
sbtでは独自にコマンドをできます。 使用するのは Command.command, Command.single, Command.args です。 引数なしのコマンドを定義する Command.command を使います。 val command: Command = Command.command("name")(action) 1つ目の引数がコマンド名、 2つ目の引数が action です。 具体的な処理は action に書きます。 action の型を見てみると val action: State => State = ... 何らかのアクションを実行する前の状態をとって、アクションを実行したあとの状態を返す関数って考えれば良いのでしょうか? Command.command を使って "Hello" と言うだけの hello コマンドを作ると次のようになります。 // hell
求職活動中とありますが、活動報告というよりは、技術の話題を多めでいきます。Scalaが大好きなので特にScalaの話が中心になると思います。 最近「Gaeds」というScalaのライブラリを作っているのですが、 Maven Centralリポジトリから使えるようにしたので、 その経験を元にScalaのライブラリをMaven Centralリポジトリに登録する方法を解説したいと思います。 と言っても、他にドキュメントがないというわけではなく、 むしろわかりやすいドキュメントが既にたくさんあるのですが、 ただ手順自体が結構複雑なので、 僕のほうでも情報をまとめておきたいと思います。 まず、おおまかに方法を説明すると、 ライブラリをMaven Centralリポジトリに直接登録するのではなく、 「Sonatype OSSRH (OSS Repository Hosting Service)」とい
OutOfMemoryErrorでなくても、stacktraceにObjectOutputStreamがどうとか、java.net.SocketException: Socket closedとか、見慣れないよくわからないstacktrace出る場合もあります。かつ、テストが途中で止まっても、最終的な結果はsuccessと表示される場合もあります。 Play2.1からテストがforkされたJVM上で行われるようになったけど、これ URL が、Play側で設定されてないから簡単にメモリ不足でテストが死ぬ。のでこれ URL と同じようなことしないといけない 2013-02-05 15:18:24 via web テスト用のサーバー起動させると簡単にメモリ不足になってこの現象に遭遇するので、必ずjavaOptions設定しておきましょう。*1 簡単に解説しておくと、Play2.1から*2最近sb
sbtのタスク sbtを起動中とする。tasksと入力すると一覧がでる。 > tasks This is a list of tasks defined for the current project. It does not list the scopes the tasks are defined in; use the 'inspect' command for that. Tasks produce values. Use the 'show' command to run the task and print the resulting value. clean Deletes files produced by the build, such as generated sources, compiled classes, and task caches. compile Com
開発メモ。 20141002追記 sbtのドキュメントのリンクを最新のものに変更しました。 また0.13.5以降のAuto Pluginの説明には対応してないので、気が向いたら追記します。 作り方 以下の公式ドキュメントがわかりやすい。 sbt Reference Manual — Plugins 必要なのは以下の2点のみ。 build.sbtにplugin用設定を書く Pluginを継承したObjectを定義する plugin用のビルド定義ファイルを用意する おそらく最低限必要なのは以下の内容。 // build.sbt sbtPlugin := true name := "sample-plugin" organization := "com.example.sample" Pluginを継承したObjectを定義する 定義方法は2種類あり、Taskを利用する方法と、Commandを利
publishing The best of two worlds ls assumes two things about your library 1) Its source is opensource and hosted on Github 2) You build your projects with sbt* * 2 is not required, but highly recommended. ls learns about your library through a process called lsyncing, which synchronizes ls with build information hosted on Github. Because only privileged parties may commit to these repositories, l
歌舞伎座.tech#1 sbtのマルチモジュールのビルドおそくね? from Satoshi Goto ニコ生での発表の様子 一行でまとめ:マルチモジュール形式のsbtプロジェクトの場合にSNAPSHOTバージョンのライブラリを使っていると毎回ライブラリの解決してて遅くなるからHTTP Proxyとか使ってキャッシュしましょう。 id:yuto_sasaki に発表資料を見てもらったあとで、SNAPSHOTバージョンが悪いんじゃね?という助言を頂きました。ありがとうございます。 開場中にid:xuwei から補足を頂いてました。ありがとうございます: #kbkz_tech SNAPSHOTになってると毎回見に行くのは、そういう仕様。 offlineというKey https://t.co/w1FIHkuSzR とかあるけど。あとそもそも毎回cleanとかしない限り、そっちの遅さより、コンパイ
2. お前だれよ? ● twitter @xuwei_k ● blog http://d.hatena.ne.jp/xuwei/ ● github https://github.com/xuwei-k ● Scalaでお仕事してます ● Scala 自体は 2009年の秋くらい ( まだ2.8.0がbeta versionの とき? ) に始めたので、もうすぐ2年くらい? ● ScalaDays2011 というアメリカのイベントに行ってOdersky 先生に会ってきたよ! ● @scalalog っていう単にひたすらコミットログをtweetするbot を自分のためにつくって追っかけたりするほどにScala好き
n8han/giter8 · GitHub 前提 このエントリは giter8 の使いかたについては知っている前提です。 やっておく giter8をアップデートしましょう。 verbatimとかの機能が最近追加されてます。 $ cs n8han/giter8 ディレクトリ構成 src/main/g8 の中にテンプレート化したいプロジェクトをぶっこみます。 参考: tototoshi/scalatra-bootstrap.g8 · GitHub src └── main └── g8 ├── build.sbt ├── default.properties └── src └── main ├── resources └── scala └── $package$ ├── $servlet_class_name$.scala └── InitializationListener.scala
以前playでsalatを使うときにplay-salatを使ったのですが、giter8という名前を見たのはそのときが最初だったと思います。 それからたまに名前を見かけるのですがどういうものか知らずに使っていたので、今更ながらいじってみました。 giter8とは giter8はgithub上のテンプレートを利用してファイルやディレクトリを生成するコマンドラインツールです。giter8を使うことでsbtプロジェクトなどの作成が楽になります。 macなら導入はhomebrewで簡単にできます。 brew update && brew install giter8 giter8の使い方 以下のようにテンプレート名を指定して、あとは変数部分を対話的に入れていきます。 g8 typesafehub/scala-sbt # sbtプロジェクトの作成 Scala Project Using sbt org
Jettyを使ってjetty-run、jetty-stopとかprepare-webappとかを繰り返していると、そのうちPermanentを使い切ってOutOfMemoryErrorが発生します。 こんな感じ。 [info] Compiling 1 Scala source to /xxxxx/hello-servlet/target/scala-2.9.0.final/classes... java.lang.OutOfMemoryError: PermGen space at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222) at java.util.concurrent.FutureTask.get(FutureTask.java:83) at sbt.CompletionService$$anon
Now that RoboVM has started to mature, I decided to see how viable Scala on iOS can really be. I have released an sbt plugin, sbt-robovm, that is nearing a 0.1.0 release and added support for that in libgdx-sbt as a proof of concept. After spending many days trying to wrangle Xamarin / IKVM into compiling Scala, it is satisfying to finally see games running on a real iOS device. I'll talk more abo
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く