34752
お世話になっております。

Javaで形態素解析をしています。使用しているツールは`Kuromoji`です。

<https://github.com/atilika/kuromoji>

このページにあるように`pom.xml`に

```

    <dependency>
      <groupId>com.atilika.kuromoji</groupId>
      <artifactId>kuromoji-ipadic</artifactId>
      <version>0.9.0</version>
    </dependency>
    
```

を書いてプロジェクトで`Kuromoji`を使っています。

また、一人での作業ではなくチームで作業しています。

形態素解析の辞書は最新のものを使いたいことから`mecab-ipadic-neologd`を使いたいと思っています。

<https://github.com/neologd/mecab-ipadic-neologd>

これはmecab用ですので、次のビルドスクリプトを使って.jarファイルを作りました。

<https://github.com/kazuhira-r/kuromoji-with-mecab-neologd-buildscript>

Mavenでインストールされたのは次の2つですが

  * `com.atilika.kuromoji:kuromoji-core:0.9.0`
  * `com.atilika.kuromoji:kuromoji-ipadic:0.9.0`

IDE（IntelliJ IDEA）のProject Structureから`kuromoji-
ipadic:0.9.0`を削除して、先程ビルドスクリプトで作った.jarファイルを追加すると新しい辞書が使えます。

問題は自分のローカルの環境だけ新しい辞書するのではなく、開発チーム全体で`kuromoji-
ipadic:0.9.0`を使いたいのですが、そのやり方がわかりません。

```

    mvn install:install-file -Dfile=/path/to/mecab-ipadic-NEologd_kuromoji/kuromoji-with-mecab-neologd-buildscript/kuromoji-ipadic-neologd-0.9.0-20170508.jar -DgroupId=com.atilika.kuromoji -DartifactId=kuromoji-ipadic -Dversion=0.9.0 -Dpackaging=jar -DgeneratePom=true
    
```

を試したところ、どうもkuromoji-coreが消えてしまったようでうまく行きませんでした。

Mavenでこのようなこと（Kuromojiはmavenで管理できるが新しい辞書は.jarファイルを自分で作り差し替えたい）をやるにはどうしたらいいか、あるいはKuromojiで同じことを試した方がいらっしゃれば、お知恵を拝借できれば幸いです。

なおプロジェクトはSVNで共有しています。

よろしくお願いします。
CC BY-SA 3.0
2017-05-13T00:36:28.087
34673
2017-05-16T13:46:57.663
14631
question
java maven intellij-idea jar
Mavenで管理しているプロジェクトに.jarファイルを追加する方法
Mavenのインハウスリポジトリをネットワーク内に構築します。  
`pom.xml`にそのリポジトリの場所を追加することで、開発チーム全体でプロジェクト固有のJARファイルを利用できます。

インハウスリポジトリを構築するツールはいくつかあります。

  * Artifactory
  * Nexus

リポジトリを構築し、そこへJARファイルをデプロイします。  
プロジェクトメンバーは`pom.xml`に`<dependency>`を記述し、Mavenセントラルリポジトリからダウンロードする他のライブラリと同じように、インハウスリポジトリからプロジェクト固有のJARファイルをダウンロードします。

* * *

私はArtifactoryを使っています。有償版とOSS版がありますのでご注意ください。  
<https://www.jfrog.com/open-source/>  
ダウンロードして、サーバに構築します。  
<https://www.jfrog.com/confluence/display/RTF/Installing+Artifactory#InstallingArtifactory-
InstallingArtifactory>

そして、作成したJARをインハウスリポジトリにデプロイします。さまざまなデプロイ手段があります。ここではWebからデプロイします。

<http://localhost:8080/artifactory/webapp/#/artifacts/browse/tree/General/libs-
snapshot-local>

デフォルトの管理者アカウントは、Username: admin、Password: passwordです。

`localhost:8080/artifactory`は構築したものに合わせて適宜書き換えてください。libs-snapshot-
localはArtifactoryでライブラリのスナップショットをデプロイするリポジトリです。

`Deploy`ボタンを押し、JARファイルをアップロードします。完了すると、左ペインのTreeからそのJARを選択します。`Dependency
Declaration`の項目を見ると、Mavenでの記述内容があります。たとえば以下のようなものです。

```

    <dependency>
        <groupId>com.example</groupId>
        <artifactId>example-library</artifactId>
        <version>0.0.1-20170511.044305-1</version>
    </dependency>
    
```

これを`pom.xml`に追加します。  
最後に、`pom.xml`にインハウスリポジトリの場所を記述します。

```

    <repository>
        <id>artifactory</id>
        <name>In-house Maven2 Repository</name>
        <url>http://localhost:8080/artifactory/libs-snapshot-local/</url>
    </repository>
    
```

これで各メンバーの環境で`mvn compile`などをすると、インハウスリポジトリからJARファイルをダウンロードできます。

プロキシがある場合は、構築したサーバはsetting.xmlのプロキシ設定でnonProxyHostsに追加してください。

別の観点で、今後プロジェクトで構築した辞書を使うと思いますので、kuromoji-ipadicは依存から削除してよさそうです。

```

    <dependency>
      <groupId>com.atilika.kuromoji</groupId>
      <artifactId>kuromoji-ipadic</artifactId>
      <version>0.9.0</version>
    </dependency>
    
```

は削除し、代わりにcoreだけを依存に書けばよいのではないでしょうか。

```

    <dependency>
        <groupId>com.atilika.kuromoji</groupId>
        <artifactId>kuromoji-core</artifactId>
        <version>0.9.0</version>
    </dependency>
    
```

* * *

この例ではWebからデプロイしましたが、JARとなるライブラリの方の`pom.xml`を変えれば、`mvn
deploy`でArtifactoryに直接デプロイすることもできます。

```

    <distributionManagement>
        <snapshotRepository>
            <id>snapshots</id>
            <name>example-snapshots</name>
            <url>http://localhost:8080/artifactory/libs-snapshot-local</url>
        </snapshotRepository>
    </distributionManagement>
    
```

これは、以下のURLで`Set Me Up`ボタンを押し、`Virtual Repository Associations`のリンクを押しても確認できます。  
<http://localhost:8080/artifactory/webapp/#/artifacts/browse/tree/General/libs-
snapshot-local>
CC BY-SA 3.0
2017-05-16T08:25:19.377
34752
2017-05-16T08:25:19.377
4464
34673
answer
> どうもkuromoji-coreが消えてしまったようでうまく行きませんでした。

の原因ですが、[オリジナルの`kuromoji-
ipadic`](http://search.maven.org/#artifactdetails%7Ccom.atilika.kuromoji%7Ckuromoji-
ipadic%7C0.9.0%7Cjar)には依存関係に`kuromoji-core`が指定されています。  
そのため、明示的に`kuromoji-core`を依存関係に設定しなくとも、`kuromoji-ipadic`を依存関係に追加した時点で共連れで入ります。  
他方、

> `mvn install:install-file -Dfile=/path/to/mecab-ipadic-
> NEologd_kuromoji/kuromoji-with-mecab-neologd-buildscript/kuromoji-ipadic-
> neologd-0.9.0-20170508.jar -DgroupId=com.atilika.kuromoji
> -DartifactId=kuromoji-ipadic -Dversion=0.9.0 -Dpackaging=jar
> -DgeneratePom=true`

コマンドでMaven配下に置いたものはそのような依存関係が設定されないため、`kuromoji-core`は自動では含まれません。

解決策は単純で、自動で追加されないのであれば手動で明示的に追加してやれば良いだけです。  
つまり、`pom.xml`に `kuromoji-core`, `kuromoji-ipadic` 双方を記載するようにします。

```

    <dependency>
        <groupId>com.atilika.kuromoji</groupId>
        <artifactId>kuromoji-core</artifactId>
        <version>0.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.atilika.kuromoji</groupId>
      <artifactId>kuromoji-ipadic</artifactId>
      <version>0.9.0</version>
    </dependency>
    
```

誰か(例えばKeisuke Uedaさん)が `kuromoji-ipadic-neologd-xxxx.jar`
をビルドし、SVNや共有ディレクトリ等で共有する、そしてそれを利用者が各自取得し`mvn install:install-
file`コマンドで各々のローカルリポジトリにインストールする、という運用で良いのであれば  
Keisuke Uedaさんが今やられていること + 上記の通り`kuromoji-core`を`pom.xml`に追記、でいけるかと思います。

* * *

本筋からは少し外れますが、`groupId`, `artifactId` をオリジナルのものと同じにしてしまうと紛らわしいので、  
例えば`artifactId`を `mecab-ipadic-neologd`に変更するなど区別できるようにした方が要らぬ問題を起こさずに済むかと思います。  
( `mvn install:install-file`
の引数、`pom.xml`に記載するdependency該当文字列をそれぞれ書き換えることで実現できます。)
CC BY-SA 3.0
2017-05-16T13:46:57.663
34760
2017-05-16T13:46:57.663
2808
34673
answer