maven セントラルにないのJAR
create: 6/23/2020
update: 6/23/2020
java maven gradle

ないのじゃー

使いたいなーと思っていた JAR が maven セントラルにないとき。
安易にapi files('lib/opensaml-2.6.6.jar') とかやってませんか?

やってました。

maven はセントラル以外にも設定できる

デフォルトではセントラルにしか見に行かないので、見つからなかったら JAR ファイル実態をプロジェクトに保存しがち。
でも、セントラル以外のリポジトリに置いてあることが多々あります。

セントラルを見に行くと、情報だけはあったりします。
maven セントラルで見た情報

注目すべきは画像下部、Note: this artifact it located alfresco repository のところ。

そう、セントラルにはないけれどhttps://artifacts.alfresco.com/nexus/content/repositories/public/にならあるよ!と教えてくれていたのです!
gradleのリポジトリ情報に追記すると、mavenのセントラルにない情報は記述順の優先度で取得してくれます。

build.gradle に maven リポジトリ情報を追加する

gradle に追記

gradle.build に追記します。

repositories {
  mavenLocal()
  mavenCentral()
  maven { url "https://artifacts.alfresco.com/nexus/content/repositories/public/" }
}

pom.xml に追記

mave でやるならたぶんこう。

<repositories>
  <!-- 中略 -->
  <repository>
    <id>alfresco</id>
    <name>Alfresco</name>
    <url>https://artifacts.alfresco.com/nexus/content/repositories/public/</url>
  </repository>
</repositories>

上記の例だとローカルキャッシュをみて、なかったらセントラルから取得、それでもなければ alfresco のキャッシュサーバから取得。
それでもなければ未解決エラーになります。

これでプロジェクトサイズを削減できますね!
勉強になりました。

おまけ

※ 記事では紹介のために alfresco のみ追加しましたが、oensaml2.6.6を利用してコンパイルを通すためにはあと 2 つ必要でした。

maven { url "https://build.shibboleth.net/nexus/content/repositories/releases/" }
maven { url "https://repository.mulesoft.org/releases/" }

Oracle JDBC 関連

Oracle 系はセントラル見ても辿れない。

https://www.oracle.com/database/technologies/maven-central-guide.html からたどると https://repo1.maven.org/maven2/ がリポジトリっぽいです。

バージョンは限定しておいてあるみたいなので注意。
プロジェクトで使ってた orai18n:11.2.0.3 はなく、 orai18n:11.2.0.4 しか置いてませんでした。

repositories {
  maven { url "https://repo1.maven.org/maven2/" }
}
api 'com.oracle.ojdbc:ojdbc8:19.3.0.0'
api 'com.oracle.database.nls:orai18n:11.2.0.4'

まとめ

JAR ライブラリは、きっとどこかで配信してくれています。
あきらめずに探してみよう!

参考サイト

Spring SAML: Could not find artifacts while using as maven dependency with version 1.0.4.RELEASE - stack overflow