ローカルに maven リポジトリを作ってみた

sbt の環境構築は http://d.hatena.ne.jp/alpha_neet/20111012/1318437291 を参考にしてください

環境

java 1.6.0_26
maven 3.0.3
scala 2.9.1.final
sbt 0.11

まずは maven でハロワをやってみる

どうも maven 力が足りなくて調べても何やってるのか分かんないことが多いので一度 maven をざっくり調べてみようという顔になりました。


ひさびさに java の力を解放します(きりっ
ただしハロワのみ(笑)


http://wiki.fdiary.net/maven2/?CookBook を参考に

mvn archetype:create -DgroupId=hello -DartifactId=work
cd work
vim src/main/java/hello/App.java

package hello;

public class App 
{
  public String hatarake() { return "Hello Work!"; }
  public static void main( String[] args ) { System.out.println( (new App()).hatarake() ); }
}

初回は何か勝手に色々とダウンロードするんですが取り敢えず気にしないことに


http://www25.atwiki.jp/dotcom/pages/337.html を参考にコンパイル & 実行

mvn compile
mvn exec:java -Dexec.mainClass=hello.App

凄まじいログの嵐の隙間に「Hello Work!」が表示されていれば成功。

mvn package

で jar を生成。target ディレクトリの中に jar があれば成功。

ローカルにデプロイしてみる

http://www.techscore.com/tech/Java/ApacheJakarta/Maven/2-4/#maven-2-9 を参考に

<project ...>
  <groupId>hello</groupId>
  <artifactId>work_2.9.1</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>

  <distributionManagement>
    <repository>
      <id>hello-work</id>
      <name>helloWork</name>
      <url>file://${env.HOME}/lib/sample-mvn-repo</url>
    </repository>
  </distributionManagement>
  ...
</project>

mvn clean deploy

$HOME/lib/sample-mvn-repo/hello/work_2.9.1/1.0 ディレクトリに work_2.9.1-1.0.jar と work_2.9.1-1.0.pom が生成されていれば成功。


sbt で使用する場合の pom.xml の記述のはまりどころは二点

  • artifactId は_ にする。今回ならば work_2.9.1 という形になる
  • version はデフォルトの状態だと -SNAPSHOT が付いてるけど消さないと駄目(build.sbt でのバージョン指定を "1.0-SNAPSHOT" にすれば動くかも?)

sbt で使用してみる

http://eed3si9n.github.com/sbt-getting-started-guide-ja/hello/ を見る感じソースコードはプロジェクトディレクトリ直下でもいいっぽい。


ある程度の規模のコードなら大人しく慣習にしたがって src/main/scala に入れるのがいいと思うますが、適当なチラ裏なら直下楽そう。

vim build.sbt
vim main.scala

  • build.sbt
resolvers += "Local Maven Repository" at "file://" + Path.userHome + "/lib/sample-mvn-repo"

libraryDependencies += "hello" %% "work" % "1.0"
object Main { 
  def main(args: Array[String]) {
    println(new (hello.App).hatarake)
  }
}

sbt run

「Hello Work!」と表示されたら成功。


失敗してる時は多分 repo が見つからん的なエラーログが出るのでパスがあってるかを確認するといいかも。
最悪手動でファイル名やディレクトリ階層を合わせても(自分の場合)動きました。