CLOVER🍀

That was when it all began.

Maven Central RepositoryをCLIで検索できるmcsを試す

これは、なにをしたくて書いたもの?

Javaを使う時はMaven Central Repositoryはほぼ確実に使いますが、アーティファクトの検索には微妙なところがあったり
します。

Web UIで探すのものいいのですが、できればCLIでなんとかしたいと思って自分でツールでも作ろうかなと思っていたところ、
すでにあるようなので試してみたいと思います。

mcs(Maven Central Search)です。

mcs(Maven Central Search)のWebサイトはこちら。

mcs (Maven Central Search) · Maarten on IT

GitHubリポジトリーはこちら。

GitHub - mthmulders/mcs: Search the Maven Central Repository from your command line!

Maven Central Searchを略してmcsなのですが、Maven Central Searchだとツールの名前だということがわからないのでは
という気がします…。

mcsはMaven Central Repositoryにクエリーを実行できるCLIです。

Maven Central Repositoryを検索できるというのは、mcsの機能というよりMaven Central Repository自身がApache Solrを
使って検索できるREST APIも公開しているからです。mcsもこちらを使っています。

Maven Central RepositoryをREST API(Apache Solr)で検索する - CLOVER🍀

それはそれとして、mcsの使い方はドキュメントを見ればほぼわかります。インストール方法はHomebrew、snap、SDKMAN、
Chocolatey、Scoopに対応しているようです。SDKMANで使えるのはいいですね。

MCS (0.9.4) | SDKMAN! the Software Development Kit Manager

対応しているOSはLinuxmacOSです。

picocliを使って作られていて、今はGraalVMでのネイティブイメージも作っているようです。

それでは試してみましょう。

環境

今回の環境はこちら。

$ sdk version

SDKMAN!
script: 5.19.0
native: 0.5.0

mcsをインストールする

最初にも書いたとおり、SDKMANでインストールすることにします。

$ sdk install mcs

とても簡単です。

バージョン。

$ mcs --version
mcs v0.9.4

ヘルプ。

$ mcs --help
Usage: mcs [-hV] [COMMAND]
  -h, --help      Display this help message and exits
  -V, --version   Show version number
Commands:
  search        Search artifacts in Maven Central by coordinates
  class-search  Search artifacts in Maven Central by class name

検索方法としてはアーティファクトの検索(search)とクラス名での検索(class-search)があるようです。

それぞれのヘルプ。

$ mcs search --help
Usage: mcs search [-hs] [-f=<type>] [-l=<count>] <query>...
Search artifacts in Maven Central by coordinates
      <query>...        What to search for.
                        If the search term contains a colon ( : ), it is considered a literal groupId and artifactId
                        Otherwise, the search term is considered a wildcard search
  -f, --format=<type>   Show result in <type> format
                        Supported types are:
                          maven, gradle, gradle-short, gradle-kotlin, sbt, ivy, grape, leiningen, buildr, jbang, gav

  -h, --help            Display this help message and exits
  -l, --limit=<count>   Show <count> results
  -s, --show-vulnerabilities
                        Show reported security vulnerabilities


$ mcs class-search --help
Usage: mcs class-search [-fh] [-l=<count>] <query>
Search artifacts in Maven Central by class name
      <query>            The class name to search for.
  -f, --[no-]full-name   Class name includes package
  -h, --help             Display this help message and exits
  -l, --limit=<count>    Show <count> results

ファイルは、確かにネイティブイメージみたいですね。

$ file $(which mcs)
$HOME/.sdkman/candidates/mcs/current/bin/mcs: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, stripped

アーティファクトを検索する

まずはアーティファクトを検索してみましょう。

Assertjをお題にしてみます。

$ mcs assertj
Searching for assertj...
Found 140 results (showing 20)

  Coordinates                                                                  Last updated
  ===========                                                                  ============
  io.qameta.allure:allure-assertj:2.32.0                                       12 Dec 2025 at 23:27
                                                                                 (GMT+09:00)
  org.arquillian.algeron:arquillian-algeron-pact-provider-assertj:2.0.0-rc.4   20 Sep 2018 at 23:24
                                                                                 (GMT+09:00)
  io.github.rascaler:assertj:1.0.1                                             16 Nov 2021 at 10:07
                                                                                 (GMT+09:00)
  it.ozimov:assertj:2.0.0                                                      20 Mar 2018 at 01:10
                                                                                 (GMT+09:00)
  org.jboss.forge.addon:assertj:3.6.2                                          02 Feb 2017 at 06:04
                                                                                 (GMT+09:00)
  com.github.leeonky:assertj-DAL:0.0.11                                        01 May 2022 at 19:03
                                                                                 (GMT+09:00)
  com.squareup.assertj:assertj-android:1.2.0                                   26 Aug 2017 at 14:14
                                                                                 (GMT+09:00)
  com.squareup.assertj:assertj-android-appcompat-v7:1.2.0                      26 Aug 2017 at 14:14
                                                                                 (GMT+09:00)
  com.squareup.assertj:assertj-android-cardview-v7:1.2.0                       26 Aug 2017 at 14:14
                                                                                 (GMT+09:00)
  com.squareup.assertj:assertj-android-design:1.2.0                            26 Aug 2017 at 14:15
                                                                                 (GMT+09:00)
  com.squareup.assertj:assertj-android-gridlayout-v7:1.2.0                     26 Aug 2017 at 14:15
                                                                                 (GMT+09:00)
  com.squareup.assertj:assertj-android-mediarouter-v7:1.2.0                    26 Aug 2017 at 14:15
                                                                                 (GMT+09:00)
  com.squareup.assertj:assertj-android-palette-v7:1.2.0                        26 Aug 2017 at 14:15
                                                                                 (GMT+09:00)
  com.squareup.assertj:assertj-android-play-services:1.2.0                     26 Aug 2017 at 14:15
                                                                                 (GMT+09:00)
  com.squareup.assertj:assertj-android-recyclerview-v7:1.2.0                   26 Aug 2017 at 14:16
                                                                                 (GMT+09:00)
  com.squareup.assertj:assertj-android-support-v4:1.2.0                        26 Aug 2017 at 14:16
                                                                                 (GMT+09:00)
  in.rcard:assertj-arrow-core:2.0.0                                            22 Sep 2025 at 15:44
                                                                                 (GMT+09:00)
  org.assertj:assertj-assertions-generator:3.0.0-M5                            14 May 2025 at 07:58
                                                                                 (GMT+09:00)
  io.fabric8.assertj:assertj-assertions-generator:2.0.1.2                      12 Apr 2016 at 17:45
                                                                                 (GMT+09:00)
  org.assertj:assertj-assertions-generator-maven-plugin:2.2.0                  10 Mar 2019 at 13:30
                                                                                 (GMT+09:00)

サブコマンドを指定しない場合は、searchで実行されるようです。

ちょっと多いですね。

assertj-coreで検索してみます。

$ mcs assertj-core
Searching for assertj-core...
Found 3 results

  Coordinates                                  Last updated
  ===========                                  ============
  org.assertj:assertj-core:4.0.0-M1            10 Mar 2025 at 08:18
                                                 (GMT+09:00)
  org.assertj:assertj-core-java8:1.0.0m1       03 Jan 2015 at 07:19
                                                 (GMT+09:00)
  net.wuerl.kotlin:assertj-core-kotlin:0.2.1   18 May 2017 at 05:33
                                                 (GMT+09:00)

だいぶ絞られました。

単語を続けるとAND検索になるようです。

$ mcs assertj core
Searching for assertj core...
Found 6 results

  Coordinates                                   Last updated
  ===========                                   ============
  in.rcard:assertj-arrow-core:2.0.0             22 Sep 2025 at 15:44
                                                  (GMT+09:00)
  org.assertj:assertj-core:4.0.0-M1             10 Mar 2025 at 08:18
                                                  (GMT+09:00)
  org.assertj:assertj-core-java8:1.0.0m1        03 Jan 2015 at 07:19
                                                  (GMT+09:00)
  net.wuerl.kotlin:assertj-core-kotlin:0.2.1    18 May 2017 at 05:33
                                                  (GMT+09:00)
  com.github.attiand:assertj-jaxrs-core:3.0.1   26 Apr 2023 at 17:37
                                                  (GMT+09:00)
  de.neuland-bfi:assertj-logging-core:0.5.0     03 Feb 2022 at 01:27
                                                  (GMT+09:00)

グループIDとアーティファクトIDを完全一致させるとバージョンまで表示されるようです。

$ mcs org.assertj:assertj-core
Searching for org.assertj:assertj-core...
Found 82 results (showing 20)

  Coordinates                         Last updated
  ===========                         ============
  org.assertj:assertj-core:4.0.0-M1   10 Mar 2025 at 08:18
                                        (GMT+09:00)
  org.assertj:assertj-core:3.27.7     25 Jan 2026 at 04:07
                                        (GMT+09:00)
  org.assertj:assertj-core:3.27.6     23 Sep 2025 at 01:51
                                        (GMT+09:00)
  org.assertj:assertj-core:3.27.5     19 Sep 2025 at 06:53
                                        (GMT+09:00)
  org.assertj:assertj-core:3.27.4     07 Aug 2025 at 23:03
                                        (GMT+09:00)
  org.assertj:assertj-core:3.27.3     18 Jan 2025 at 19:56
                                        (GMT+09:00)
  org.assertj:assertj-core:3.27.2     04 Jan 2025 at 19:59
                                        (GMT+09:00)
  org.assertj:assertj-core:3.27.1     02 Jan 2025 at 02:54
                                        (GMT+09:00)
  org.assertj:assertj-core:3.27.0     20 Dec 2024 at 02:00
                                        (GMT+09:00)
  org.assertj:assertj-core:3.26.3     10 Jul 2024 at 02:08
                                        (GMT+09:00)
  org.assertj:assertj-core:3.26.0     26 May 2024 at 18:22
                                        (GMT+09:00)
  org.assertj:assertj-core:3.25.3     05 Feb 2024 at 06:54
                                        (GMT+09:00)
  org.assertj:assertj-core:3.25.2     24 Jan 2024 at 22:03
                                        (GMT+09:00)
  org.assertj:assertj-core:3.25.1     03 Jan 2024 at 08:42
                                        (GMT+09:00)
  org.assertj:assertj-core:3.25.0     01 Jan 2024 at 01:00
                                        (GMT+09:00)
  org.assertj:assertj-core:3.24.2     17 Jan 2023 at 07:11
                                        (GMT+09:00)
  org.assertj:assertj-core:3.24.1     07 Jan 2023 at 01:41
                                        (GMT+09:00)
  org.assertj:assertj-core:3.24.0     06 Jan 2023 at 08:10
                                        (GMT+09:00)
  org.assertj:assertj-core:3.23.1     01 Jun 2022 at 02:22
                                        (GMT+09:00)
  org.assertj:assertj-core:3.23.0     31 May 2022 at 07:59
                                        (GMT+09:00)

バージョンまで指定すると、pom.xmlに書く時のdependencyが表示されます。

$ mcs org.assertj:assertj-core:3.27.7
Searching for org.assertj:assertj-core:3.27.7...

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.27.7</version>
    </dependency>

出力する形式は、-fオプションで指定可能です。

  -f, --format=<type>   Show result in <type> format
                        Supported types are:
                          maven, gradle, gradle-short, gradle-kotlin, sbt, ivy, grape, leiningen, buildr, jbang, gav

たとえばGradle。

$ mcs org.assertj:assertj-core:3.27.7 -f gradle
Searching for org.assertj:assertj-core:3.27.7...

implementation group: 'org.assertj', name: 'assertj-core', version: '3.27.7'


$ mcs org.assertj:assertj-core:3.27.7 -f gradle-short
Searching for org.assertj:assertj-core:3.27.7...

implementation 'org.assertj:assertj-core:3.27.7'

クラス名で検索する

あまり使わない気もしますが、クラス名でも検索してみましょう。

たとえばWildFLy Arquillian AdapterのRemoteContainerConfigurationクラス。
※なにを指定してもたくさんヒットするので、いい例がありませんでした…

$ mcs class-search RemoteContainerConfiguration
Searching for artifacts containing RemoteContainerConfiguration...
Found 158 results (showing 20)

  Coordinates                                                                   Last updated
  ===========                                                                   ============
  org.jboss.arquillian.container:arquillian-container-osgi-remote:1.0.1         01 Mar 2012 at 02:05
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-container-osgi-remote:1.0.0         06 Feb 2012 at 17:25
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-container-osgi-remote:1.0.0.CR3     25 Jul 2011 at 22:32
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-container-osgi-remote:1.0.0.CR6     28 Jan 2012 at 01:03
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-container-osgi-remote:1.0.2.Final   01 Mar 2012 at 18:56
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-container-osgi-remote:1.0.0.CR5     19 Jan 2012 at 17:05
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-container-osgi-remote:1.0.0.CR4     15 Aug 2011 at 18:58
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-container-osgi-remote:1.0.0.CR2     03 Jul 2011 at 17:08
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-osgi-remote:1.0.0.Alpha4.SP7        08 Feb 2011 at 00:23
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-osgi-remote:1.0.0.Alpha4.SP1        13 May 2011 at 00:08
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-osgi-remote:1.0.0.Alpha4.SP8        18 Feb 2011 at 16:16
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-osgi-remote:1.0.0.Alpha4.SP2        29 Sep 2010 at 16:25
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-osgi-remote:1.0.0.CR1               23 Jun 2011 at 05:02
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-osgi-remote:1.0.0.Alpha4.SP10       13 May 2011 at 00:08
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-osgi-remote:1.0.0.Alpha4.SP3        24 Nov 2010 at 18:14
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-osgi-remote:1.0.0.Alpha4.SP6        19 Jan 2011 at 00:31
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-osgi-remote:1.0.0.Alpha4-OSGi       15 Sep 2010 at 14:27
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-osgi-remote:1.0.0.Beta2             09 Jun 2011 at 01:26
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-osgi-remote:1.0.0.Alpha4.SP5        21 Dec 2010 at 16:52
                                                                                  (GMT+09:00)
  org.jboss.arquillian.container:arquillian-osgi-remote:1.0.0.Alpha4.SP9        11 Mar 2011 at 06:23
                                                                                  (GMT+09:00)

-fでクラス名の完全一致で指定することもできます。

$ mcs class-search -f org.jboss.as.arquillian.container.remote.RemoteContainerConfiguration
Searching for artifacts containing org.jboss.as.arquillian.container.remote.RemoteContainerConfiguration...
Found 82 results (showing 20)

  Coordinates                                                               Last updated
  ===========                                                               ============
  org.jboss.as:jboss-as-arquillian-container-remote:7.0.0.Final             12 Jul 2011 at 15:59
                                                                              (GMT+09:00)
  org.jboss.as:jboss-as-arquillian-container-remote:7.1.0.CR1               24 Dec 2011 at 07:21
                                                                              (GMT+09:00)
  org.jboss.as:jboss-as-arquillian-container-remote:7.0.2.Final             23 Sep 2011 at 12:36
                                                                              (GMT+09:00)
  org.jboss.as:jboss-as-arquillian-container-remote:7.0.1.Final             18 Aug 2011 at 12:17
                                                                              (GMT+09:00)
  org.jboss.as:jboss-as-arquillian-container-remote:7.0.0.CR1               29 Jun 2011 at 16:24
                                                                              (GMT+09:00)
  org.jboss.as:jboss-as-arquillian-container-remote:7.1.0.Final             16 Feb 2012 at 16:50
                                                                              (GMT+09:00)
  org.jboss.as:jboss-as-arquillian-container-remote:7.1.1.Final             10 Mar 2012 at 16:40
                                                                              (GMT+09:00)
  org.jboss.as:jboss-as-arquillian-container-remote:7.2.0.Final             09 Mar 2013 at 07:34
                                                                              (GMT+09:00)
  org.jboss.as:jboss-as-arquillian-container-remote:7.1.3.Final             11 Jan 2013 at 02:20
                                                                              (GMT+09:00)
  org.jboss.as:jboss-as-arquillian-container-remote:7.1.0.CR1b              24 Dec 2011 at 07:21
                                                                              (GMT+09:00)
  org.jboss.as:jboss-as-arquillian-container-remote:7.1.0.Beta1             02 Dec 2011 at 13:28
                                                                              (GMT+09:00)
  org.jboss.as:jboss-as-arquillian-container-remote:7.1.2.Final             18 Jul 2012 at 23:45
                                                                              (GMT+09:00)
  org.jboss.as:jboss-as-arquillian-container-remote:7.1.0.Beta1b            02 Dec 2011 at 13:28
                                                                              (GMT+09:00)
  org.wildfly:wildfly-arquillian-container-remote:8.2.1.Final               24 Jul 2015 at 09:27
                                                                              (GMT+09:00)
  org.wildfly:wildfly-arquillian-container-remote:8.2.0.Final               21 Nov 2014 at 13:44
                                                                              (GMT+09:00)
  org.wildfly:wildfly-arquillian-container-remote:8.0.0.Alpha1              18 May 2013 at 11:02
                                                                              (GMT+09:00)
  org.wildfly.arquillian:wildfly-arquillian-container-remote:1.0.0.Final    26 Jun 2015 at 10:34
                                                                              (GMT+09:00)
  org.wildfly.arquillian:wildfly-arquillian-container-remote:3.0.0.Beta3    02 Sep 2020 at 00:34
                                                                              (GMT+09:00)
  org.wildfly.arquillian:wildfly-arquillian-container-remote:5.0.0.Alpha1   13 Jul 2021 at 00:13
                                                                              (GMT+09:00)
  org.wildfly.arquillian:wildfly-arquillian-container-remote:1.1.0.Beta2    11 Mar 2016 at 05:29
                                                                              (GMT+09:00)

が、(完全一致かどうかに関わらず)アーティファクトが検索結果に現れるというより、対象のクラスを含む
アーティファクトのバージョンまで全部表示されてしまうのでなかなか扱いが難しいです。

設定

mcsには-Dシステムプロパティーを指定できるようです。

今回は使いませんが、ユーザーのホームディレクトリーに.mcsディレクトリーを作成し、mcs.configというファイルを
作ることで自動的にシステムプロパティーを適用させることもできるようです。

プロキシに関してはHTTP_PROXYおよびHTTPS_PROXY環境変数も見てくれるのだとか。

おわりに

Maven Central RepositoryをCLIで検索できるmcsを試してみました。

良いですね、完全に自分が使いたかったものと合っています。

特にMaven Central Repositoryの検索がcentral.sonatype.comになってから、個人的にはちょっと合わないと思っていたので
今後はmcsを活用していこうと思います。