Maven3/ローカルのファイルを使って依存性解決をする

Maven3/ローカルのファイルを使って依存性解決をする

つまり・・・

  • プロジェクト中に依存性のあるファイルを置いときたい
  • でもリポジトリ用のサーバ立てたくね〜
  • でもMavenのクラスパスのセットとかの恩恵は受けたい
  • Ant?なにそれ

っていう人向け

定数で環境依存性を排除しつつ依存性を解決する

つまり単にローカルにあるファイルをクラスパス通すところにコピーしますよということ。

pom.xmlにこう書く。

<dependency>
    <groupId>hoge</groupId>
    <artifactId>piyo</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/piyo-1.0.jar</systemPath>
</dependency>

basedirを指定することによりローカルファイルシステムの依存性を一応排除している。

ちなみに

${basedir}

というのはpomのファイルがあるディレクトリのフルパスを表す

しかしこれではpackageの際には含まれんのだよね〜

eclipseで開発している分にはいいがmaven全体での統合管理としては問題があるっぽい。

なんだかこれとdependencyプラグインでできるみたいに書いてあったサイトがあったが俺はこのやり方断念。 どんなに頑張ってもpackageで作ったwarにsystemPathで突っ込んだjarが含まれない

プロジェクト内にリポジトリを作ってしまう

ということでプロジェクト内にリポジトリを作ってしまう。

プロジェクトhogehogecom.piyoというグループで依存性解決したい(単純のとってきたい)artifactがfuga、 そのバージョンが0.2.0だったとすると

  • hogehoge
    • repo
      • com
        • piyo
          • fuga
            • 0.2.0
              • fuga-0.2.0.jar
              • fuga-0.2.0.jar.sha1

のように配置する。sha1は検証のためのファイルだが自分がやったときは既存にあったものを引っ張ってきたので生成に関しては別の機会に

そしてpom.xmlでこいつがリポジトリなんだよということを教える

<project>
  ...
  <repositories>
    <repository>
      <id>projectinner</id>
      <url>file:${basedir}/repo</url>
    </repository>
  </repositories
  ...
</project>

あとは普通にdependencyで該当のgroupIdとartifactIdを書けば勝手にローカルリポジトリにダウンロードインストールしてくれる

packageでwarを作った場合もコピーされる。

java/apache_maven/maven3/dependency_resolve_by_local_file.txt · 最終更新: 2019-06-14 18:46 by ore