これは、なにをしたくて書いたもの?
Javaを使う時はMaven Central Repositoryはほぼ確実に使いますが、アーティファクトの検索には微妙なところがあったり
します。
Web UIで探すのものいいのですが、できればCLIでなんとかしたいと思って自分でツールでも作ろうかなと思っていたところ、
すでにあるようなので試してみたいと思います。
mcs(Maven Central Search)です。
mcs(Maven Central Search)
mcs(Maven Central Search)のWebサイトはこちら。
mcs (Maven Central Search) · Maarten on IT
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
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を活用していこうと思います。