RaspberryPi2にArchivaセットアップしたメモ その３


前回の続き。
自前のプロジェクトをアップロードしてみる。

> ラズパイのIPを打つのが面倒なので、`/etc/hosts`に`raspi`と書いておいた。
> avahi-daemonをキチント設定すれば、こんな面倒もないらしい。停止したけど。。。

## サンプルプロジェクト

前回、guestユーザに「Repository Manager」ロールを付与したので
アップロード先を指定するだけでOKな気がする。

なので、↓こんな`build.sbt`を書いた。

```scala
lazy val root = (project in file(".")).settings(
  
  organization := "orz.sample", // groupIdになる
  name := "project",            // artifactIdになる
  version := "1.0.0-SNAPSHOT",
  
  scalaVersion := "2.11.7",
  scalacOptions ++= Seq("-deprecation", "-feature", "-unchecked"),
  
  publishMavenStyle := true, // trueにするとpomを作ってくれる（らしい）
  
  // アップロード先
  publishTo := Some("snapshots" at "http://raspi:8080/archiva/repository/snapshots/")
    
)
```

`publishTo`に指定するのは、pom.xmlの`distributionManagement`に書く内容。

pom.xmlに書くべき内容は、ArchivaのRepositoriesメニューから表示させることができる。

![2015-11-08-15.39.15.png](https://qiita-image-store.s3.amazonaws.com/0/60471/819e8feb-9beb-f516-f775-5efdba796465.png "2015-11-08-15.39.15.png")

リポジトリリストの「Actions」ボタンから「Pom Snippet」を選択すると・・・

![2015-11-08-15.39.39.png](https://qiita-image-store.s3.amazonaws.com/0/60471/ffb5eac9-e115-4ac2-6f04-2cb01a0acd44.png "2015-11-08-15.39.39.png")

画面下部にxmlが表示される。

選択範囲の`id`と`url`の箇所をコピーして

```scala
Some("{id}" at "{url}")
```

とすればOK。

アップロードしてみる。

```bash
$ sbt publish
　　　：
[info]  published project_2.11 to http://raspi:8080/archiva/repository/snapshots/orz/sample/project_2.11/1.0.0-SNAPSHOT/project_2.11-1.0.0-SNAPSHOT.pom
[info]  published project_2.11 to http://raspi:8080/archiva/repository/snapshots/orz/sample/project_2.11/1.0.0-SNAPSHOT/project_2.11-1.0.0-SNAPSHOT.jar
[info]  published project_2.11 to http://raspi:8080/archiva/repository/snapshots/orz/sample/project_2.11/1.0.0-SNAPSHOT/project_2.11-1.0.0-SNAPSHOT-sources.jar
[info]  published project_2.11 to http://raspi:8080/archiva/repository/snapshots/orz/sample/project_2.11/1.0.0-SNAPSHOT/project_2.11-1.0.0-SNAPSHOT-javadoc.jar
[success] Total time: 8 s, completed 2015/11/08 16:25:56
```

できた！

Archivaも見てみる。

![2015-11-08-16.28.14.png](https://qiita-image-store.s3.amazonaws.com/0/60471/f42c65c0-3af9-c737-d42d-a0958fde2664.png "2015-11-08-16.28.14.png")

ヨシ、できてる。


## 認証ありの場合

guestはID/PWなしでアップロードできるようにしたので
今度は認証必要にして試してみる。

testユーザを作成して「Repository Manager」ロールを付与。

![2015-11-08-17.08.58.png](https://qiita-image-store.s3.amazonaws.com/0/60471/470ff6fa-535b-8ed0-c283-5ef1381c0f12.png "2015-11-08-17.08.58.png")

![2015-11-08-17.09.17.png](https://qiita-image-store.s3.amazonaws.com/0/60471/86857353-6f4a-c6b7-55e6-3896656b8c1e.png "2015-11-08-17.09.17.png")


guestからは「Repository Manager」ロールを剥奪しておく。

guestでアップロードできなくなっているはず・・・。

```bash
$ sbt publish
　　　：
[error] Unable to find credentials for [Repository Archiva Managed snapshots Repository @ raspi].
java.io.IOException: Access to URL http://raspi:8080/archiva/repository/snapshots/orz/sample/project_2.11/1.0.0-SNAPSHOT/project_2.11-1.0.0-SNAPSHOT.pom was refused by the server: Unauthorized
```

想定どおり、失敗。

`build.sbt`に認証情報を追記。

```scala
lazy val root = (project in file(".")).settings(
  
  organization := "orz.sample", // groupIdになる
  name := "project",            // artifactIdになる
  version := "1.0.1-SNAPSHOT",
  
  scalaVersion := "2.11.7",
  scalacOptions ++= Seq("-deprecation", "-feature", "-unchecked"),
  
  publishMavenStyle := true, // trueにするとpomを作ってくれる（らしい）
  
  // アップロード先
  publishTo := Some("snapshots" at "http://raspi:8080/archiva/repository/snapshots/"),
  
  // 認証情報（リポジトリの名前, host, ID, PW）
  credentials += Credentials("Repository Archiva Managed snapshots Repository", "raspi", "test", "passwd1234")
  
)
```

`credentials`に指定する内容は、、、

```scala
credentials += Credentials("{リポジトリ名}", "{ホスト名}", "{ID}", "{PW}")
```

`publishTo`に指定した「リポジトリID」ではなく「リポジトリ名」を指定する。
リポジトリ名はArchivaで確認。


```scala
$ sbt publish
　　　：
[info] Done packaging.
[info]  published project_2.11 to http://raspi:8080/archiva/repository/snapshots/orz/sample/project_2.11/1.0.1-SNAPSHOT/project_2.11-1.0.1-SNAPSHOT.pom
[info]  published project_2.11 to http://raspi:8080/archiva/repository/snapshots/orz/sample/project_2.11/1.0.1-SNAPSHOT/project_2.11-1.0.1-SNAPSHOT.jar
[info]  published project_2.11 to http://raspi:8080/archiva/repository/snapshots/orz/sample/project_2.11/1.0.1-SNAPSHOT/project_2.11-1.0.1-SNAPSHOT-sources.jar
[info]  published project_2.11 to http://raspi:8080/archiva/repository/snapshots/orz/sample/project_2.11/1.0.1-SNAPSHOT/project_2.11-1.0.1-SNAPSHOT-javadoc.jar
[success] Total time: 4 s, completed 2015/11/08 17:31:17
```

Archivaも確認。

![2015-11-08-17.34.06.png](https://qiita-image-store.s3.amazonaws.com/0/60471/86e80192-0bc6-d9c0-0c76-eeeb205599f5.png "2015-11-08-17.34.06.png")

`1.0.1-SNAPSHOT`ができている。OK！

----

これで一通りは確認できた。満足。

関係ないが`archiva.log`には以下のようなバナーが出る。

```
                          __________________________________
               /\_       /                                  \
              /`/@),    |  On behalf of all of the alpacas   |
              |  (~'  __| toiling away on the Apache Archiva |
      _,--.___/  |    \      project team, I would like to   |
    ,' ,     (   |     \         welcome you to Archiva      |
    |  (      \  /      |               2.2.0                |
     \  )\_/  ,_/       |                                    |
     / /   ( |/         |     http://archiva.apache.org/     |
    ( |    ( |          |     users@archiva.apache.org       |
     \|     \|           \__________________________________/
```

archivaとアルパカの関係性は不明。

----

参考資料：
[Apache Archiva](http://archiva.apache.org/docs/2.2.0/)
[SBT | Publishing](http://www.scala-sbt.org/0.13/docs/Publishing.html)