2020-06-22 (2020-06-22更新)

maven セントラルにないのJAR

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


猫派 / 基本インドア / ガジェット大好き / RDP推進派
コロナ禍の趣味はPC+VRでゲーム。
最近のゲーム:Factorio / BeatSaber / にゃんこ大戦争

→ Policy