Jade Usage
Building Documentation
The documentation site combines the Markdown files in docs/ with the HTML
API reference generated by Dokka. Install the site dependencies and build the
combined site with:
# Optionally create a Python environment
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r docs/requirements.txt
./scripts/build-docs.sh
The generated site is written to site/. Serve it locally to view both the
project documentation and API reference:
python3 -m http.server 8000 --directory site
Then open http://localhost:8000. The API reference is available at http://localhost:8000/api/.
The script accepts an optional output directory:
./scripts/build-docs.sh /tmp/jade-docs-site
GitHub Actions uses the same script before publishing the site to GitHub Pages.
Classfile Commands
TODO: should these be in own subcommand
Decompile
TODO
Compile
TODO
Diff
(as of 12/06/2025) Run the Diff command using
./gradlew run --args="diff bin/test/general/Test1.class bin/test/general/Test1.class"
All it currently does is run a very basic check on all the fields of the ClassNode.
maven Commands
Used Commands
jade(obviously)bash(or similar shell)cat(not generally needed but makes shell commands easier to format)zstd(gzipis more widely supported and produces similarly sized size, butzstdmuch faster to compress and (especially) decompress)jq(for processing JSON)
TODO: not implemented:
- List repositories
- Download index from central
- Download poms from central
- Search poms for repositories
- Download poms again?
mirrors: TODO
TODO
index: Download Index
$ mkdir ../repo/index
$ time ./jade maven index https://maven-central.storage-download.googleapis.com/maven2/ ../repo/index
INFO maven.Index: downloading nexus-maven-repository-index.properties from https://maven-central.storage-download.googleapis.com/maven2/.index/ to ../repo/index3
INFO maven.Index: downloaded nexus-maven-repository-index.properties from https://maven-central.storage-download.googleapis.com/maven2/.index/ to ../repo/index3 containing 1130 bytes
INFO maven.Index: downloading nexus-maven-repository-index.gz from https://maven-central.storage-download.googleapis.com/maven2/.index/ to ../repo/index3
INFO maven.Index: downloaded nexus-maven-repository-index.gz from https://maven-central.storage-download.googleapis.com/maven2/.index/ to ../repo/index3 containing 2458624054 bytes
real 4m0.168s
user 0m6.485s
sys 0m8.849s
Alternately:
$ time ./jade maven index https://repo1.maven.org/maven2/ ../repo/index
INFO maven.Index: downloading nexus-maven-repository-index.properties from https://repo1.maven.org/maven2/.index/ to ../repo/index2
INFO maven.Index: downloaded nexus-maven-repository-index.properties from https://repo1.maven.org/maven2/.index/ to ../repo/index2 containing 1130 bytes
INFO maven.Index: downloading nexus-maven-repository-index.gz from https://repo1.maven.org/maven2/.index/ to ../repo/index2
INFO maven.Index: downloaded nexus-maven-repository-index.gz from https://repo1.maven.org/maven2/.index/ to ../repo/index2 containing 2458624054 bytes
real 33m4.825s
user 0m22.434s
sys 0m20.230s
index-to-json: Convert Index to JSON
$ time ./jade maven index-to-json ../repo/index | zstd --stdout >../repo/index/nexus-maven-repository-index.jsonl.zst
real 14m41.136s
user 15m53.276s
sys 3m44.319s
List Artifacts
$ time zstd --stdout --decompress <../repo/index/nexus-maven-repository-index.jsonl.zst |
jq --compact-output 'select(.kind == "EXPANDED_RECORD" and .type == "ARTIFACT_ADD")' | # Select only ADD records
jq --compact-output 'select(has("classifier") | not)' | # Select only non-javadoc, non-source, etc.
jq --compact-output 'select("\(.groupId)\(.artifactId)" | (contains(":") or contains(" ")) | not)' | # Remove bad artifact names
jq --raw-output '"\(.groupId):\(.artifactId)"' | # Output artifact name
jq --raw-input '.' | jq --slurp --raw-output 'unique[]' >../repo/artifact-ids.txt # Keep only unique ids
real 16m42.805s
user 34m24.959s
sys 1m10.576s
$ wc -lc ../repo/artifact-ids.txt
624415 25110145 ../repo/artifact-ids.txt
Bad Artifacts
Some artifacts have a groupId or artifactId that contian ':' or ' ', which is not allowed per DefaultArtifact.COORDINATE_PATTERN. See https://github.com/apache/maven-resolver/blob/maven-resolver-1.9.20/maven-resolver-api/src/main/java/org/eclipse/aether/artifact/DefaultArtifact.java#L76-L80
$ zstd --stdout --decompress <../repo/index/nexus-maven-repository-index.jsonl.zst |
jq --compact-output 'select(.kind == "EXPANDED_RECORD" and .type == "ARTIFACT_ADD")' | # Select only ADD records
jq --compact-output 'select(has("classifier") | not)' | # Select only non-javadoc, non-source, etc.
jq --compact-output 'select("\(.groupId)\(.artifactId)" | (contains(":") or contains(" ")))' | # Select bad artifact names
jq --raw-output '"|\(.groupId)|\(.artifactId)|"' | # Output artifact name with alternate seperator
jq --raw-input '.' | jq --slurp --raw-output 'unique[]' # Keep only unique ids
|app.ubie|app.ubie:brave-kt|
|com.foilen|com.foilen:database-tools|
|com.github.mjdev|libaums:http|
|com.github.mjdev|libaums:storageprovider|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 2.inkapplications.spondee|math-mingwx64|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 2.inkapplications.spondee|measures-mingwx64|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 3.inkapplications.spondee|math-js|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 3.inkapplications.spondee|math-jvm|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 3.inkapplications.spondee|math|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 3.inkapplications.spondee|measures-js|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 3.inkapplications.spondee|measures-jvm|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 3.inkapplications.spondee|measures|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 4.inkapplications.spondee|math-linuxarm32hfp|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 4.inkapplications.spondee|math-linuxmips32|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 4.inkapplications.spondee|math-linuxx64|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 4.inkapplications.spondee|measures-linuxarm32hfp|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 4.inkapplications.spondee|measures-linuxmips32|
|com.inkapplications.spondee.math-macosx64.0.0.3.com 4.inkapplications.spondee|measures-linuxx64|
|com.tachen.android|utilex |
|org.webjars.npm|reactivex:rxjs|
real 15m28.474s
user 27m17.804s
sys 0m57.036s
versions: Select Versions
$ time ./jade maven versions --shuffle ../repo/local-repo ../repo/versions @../repo/artifact-ids.txt
TODO ...
...
👷jobs 624_415 (cache 612_662/wait 0/run 0/done 11_753)✅pass 611_376 (cache 610_067/new 1_309)❌fail 13_039 (cache 2_595/new 0/glitch 10_444) ✅normal exit
Currently running (seconds):
<none>
Fails (Cache):
2593 org.eclipse.aether.transfer.MetadataTransferException:org.eclipse.aether.transfer.ChecksumFailureException
2 org.ucombinator.jade.maven.NoVersioningTagException
Fails (New):
<none>
Fails (Glitch):
10444 org.eclipse.aether.transfer.MetadataNotFoundException
...
$ time find ../repo/versions -type f -name \*.version -exec cat {} + >../repo/versions.txt
real 0m36.838s
user 0m0.883s
sys 0m15.095s
$ time wc -lc ../repo/versions.txt
610065 29066873 ../repo/versions.txt
real 0m0.016s
user 0m0.005s
sys 0m0.012s
$ find ../repo/versions -name \*.version.err
TODO ...
dependencies: List Dependencies
$ time ./jade maven dependencies --shuffle ../repo/local-repo ../repo/dependencies @../repo/versions.txt
TODO ...
...
👷jobs 610_065 (cache 607_147/wait 0/run 6/done 2_912)✅pass 522_367 (cache 522_355/new 12)❌fail 87_692 (cache 84_792/new 233/glitch 2_667) 🛑JVM shutdown
...
Fails (Cache):
58198 org.eclipse.aether.collection.DependencyCollectionException:org.eclipse.aether.resolution.ArtifactDescriptorException:org.eclipse.aether.resolution.ArtifactResolutionException:org.eclipse.aether.transfer.ArtifactNotFoundException
10698 org.eclipse.aether.collection.DependencyCollectionException:org.eclipse.aether.resolution.ArtifactDescriptorException:org.apache.maven.model.building.ModelBuildingException
6050 org.eclipse.aether.collection.DependencyCollectionException:org.eclipse.aether.resolution.ArtifactDescriptorException:org.apache.maven.model.resolution.UnresolvableModelException:org.eclipse.aether.resolution.ArtifactResolutionException:org.eclipse.aether.transfer.ArtifactNotFoundException
2835 org.eclipse.aether.collection.DependencyCollectionException:org.eclipse.aether.resolution.VersionRangeResolutionException
2809 org.eclipse.aether.collection.DependencyCollectionException:org.eclipse.aether.resolution.ArtifactDescriptorException:org.eclipse.aether.resolution.ArtifactResolutionException:org.eclipse.aether.transfer.ArtifactTransferException:org.apache.http.client.HttpResponseException
2094 org.eclipse.aether.collection.DependencyCollectionException:org.eclipse.aether.resolution.ArtifactDescriptorException:org.eclipse.aether.resolution.ArtifactResolutionException:org.eclipse.aether.transfer.ArtifactTransferException:java.net.UnknownHostException
1013 org.ucombinator.jade.maven.DollarInCoordinateException
642 org.eclipse.aether.collection.DependencyCollectionException:org.eclipse.aether.collection.UnsolvableVersionConflictException
363 org.ucombinator.jade.maven.CaretInVersionException
90 org.eclipse.aether.collection.DependencyCollectionException:org.eclipse.aether.resolution.ArtifactDescriptorException:org.eclipse.aether.resolution.ArtifactResolutionException:org.eclipse.aether.transfer.ArtifactTransferException:org.eclipse.aether.transfer.ChecksumFailureException
Single file with indent
$ zstd --stdout --decompress ../repo/dependencies/abbot/abbot/1.4.0/abbot-1.4.0.jar.dependencies.json.zst |
jq --compact-output 'def with_depth(i): [i, del(.children)], (.children[] | with_depth(i + 1)) ; with_depth(0)' |
jq --raw-output '(" " * .[0]) + (.[1].artifact | [.groupId, .artifactId, .extension, .classifier, .version] | map(select(. != "")) | join(":"))'
abbot:abbot:jar:1.4.0
junit:junit:jar:4.8.2
All together
$ time find ../repo/dependencies -name \*.dependencies.json.zst -exec zstd --stdout --decompress {} + |
jq --compact-output 'def with_depth(i): [i, del(.children)], (.children[] | with_depth(i + 1)) ; with_depth(0)' |
jq --raw-output '.[1].artifact | [.groupId, .artifactId, .extension, .classifier, .version] | map(select(. != "")) | join(":")' |
jq --raw-input '.' | jq --slurp --raw-output 'unique[]' |
cat >../repo/dependencies.txt
real 17m22.780s
user 28m4.016s
sys 1m9.788s
TODO: jq --raw-output 'include src/main/jq/coord.jq; .[1].artifact | coord' |
TODO: Packaging vs fileExtension:
{"kind":"EXPANDED_RECORD","type":"ARTIFACT_ADD","version":"2.0.5","groupId":"xdoclet","packaging":"maven-plugin","hasJavadoc":false,"sha1":"3207930de044f75d5bbed9c80521fd56119e3490","recordModified":1318434041457,"fileSize":12948,"fileExtension":"jar","name":"Maven2 XDoclet2 Plugin","artifactId":"maven2-xdoclet2-plugin","hasSources":false,"hasSignature":false,"fileModified":1216330098000}
Artifact Sizes
$ time zstd --stdout --decompress <../repo/index/nexus-maven-repository-index.jsonl.zst |
jq --compact-output 'select(.kind == "EXPANDED_RECORD" and .type == "ARTIFACT_ADD")' | # Select only ADD records
jq --compact-output --slurpfile d <(
jq --raw-input '.' ../repo/dependencies.txt | jq --slurp 'INDEX(.)'
) 'select($d[0]["\(.groupId):\(.artifactId):\(.fileExtension // ""):\(.classifier // ""):\(.version)"]) | .fileSize' |
jq --slurp 'add'
96_209_590_077
real 14m19.441s
user 23m9.543s
sys 0m44.759s
96_209_590_077 (TODO: is this right?)
385_848_748_952 00:18:30.39
Download Dependencies
TODO: filenames as classpath
TODO: artifact-ids.txt and artifact-jsons/
$ time ./jade maven download --shuffle ../repo/local-repo ../repo/artifacts @../repo/dependencies.txt
jq <../repo/dependencies/${file} '../.children | .artifact | coord' >../repo/dependencies
jq <../repo/dependencies/${file} '../.children | .artifact | .file' >../repo/dependencies
Class Path
tail +1 ${dependency-file} | perl -pe 's/\n/:/'
zstd --stdout --decompress ../repo/dependencies/.../foo.json.zstd |
jq --compact-output 'def with_depth(i): [i, del(.children)], (.children[] | with_depth(i + 1)) ; with_depth(0)' |
cat >../repo/depdencies/${file}
zstd --stdout --decompress ../repo/dependencies/org/apache/flink/flink-avro/1.19.1/flink-avro-1.19.1.jar.dependencies.json.zst |
jq --compact-output 'def with_depth(i): [i, del(.children)], (.children[] | with_depth(i + 1)) ; with_depth(0)' |
jq --compact-output '.[1].artifact | "\(.groupId | gsub("\\."; "/"))/\(.artifactId)/\(.version)/\(.artifactId)-\(.version)\(.classifier | if . != "" then "-" + . end).\(.fileExtension // "jar")"'
about Commands
build-info: Show information about how jade was built
$ ./jade about build-info
jade version 0.0.0-122-gd41be7b-20240722T202551+0800 (https://github.org/ucombinator/jade)
Build tools: Kotlin 1.9.22, Gradle 8.7, Java 19.0.2
Build time: 2024-07-22T20:25:51.888+08:00
Dependencies:
ch.qos.logback:logback-classic:1.5.6 (configuration: default)
com.github.ajalt.clikt:clikt:4.4.0 (configuration: default)
com.github.javaparser:javaparser-core-serialization:3.25.10 (configuration: default)
com.github.javaparser:javaparser-core:3.25.10 (configuration: default)
com.github.javaparser:javaparser-symbol-solver-core:3.25.10 (configuration: default)
com.github.luben:zstd-jni:1.5.6-3 (configuration: default)
com.pinterest.ktlint:ktlint-cli-reporter-baseline:1.2.1 (configuration: default)
com.pinterest.ktlint:ktlint-cli:1.2.1 (configuration: default)
com.pinterest.ktlint:ktlint-ruleset-standard:1.2.1 (configuration: default)
io.github.detekt.sarif4k:sarif4k:0.5.0 (configuration: default)
io.github.detekt.sarif4k:sarif4k:0.5.0 (configuration: default)
io.github.microutils:kotlin-logging-jvm:3.0.5 (configuration: default)
io.github.oshai:kotlin-logging:5.1.0 (configuration: default)
io.github.oshai:kotlin-logging:5.1.0 (configuration: default)
io.github.oshai:kotlin-logging:5.1.0 (configuration: default)
io.gitlab.arturbosch.detekt:detekt-cli:1.23.6 (configuration: default)
io.gitlab.arturbosch.detekt:detekt-rules-libraries:1.23.6 (configuration: default)
io.gitlab.arturbosch.detekt:detekt-rules-ruleauthors:1.23.6 (configuration: default)
org.apache.commons:commons-compress:1.26.1 (configuration: default)
org.apache.maven.indexer:indexer-core:7.1.3 (configuration: default)
org.apache.maven.indexer:indexer-reader:7.1.3 (configuration: default)
org.apache.maven.resolver:maven-resolver-api:1.9.20 (configuration: default)
org.apache.maven.resolver:maven-resolver-connector-basic:1.9.20 (configuration: default)
org.apache.maven.resolver:maven-resolver-impl:1.9.20 (configuration: default)
org.apache.maven.resolver:maven-resolver-spi:1.9.20 (configuration: default)
org.apache.maven.resolver:maven-resolver-supplier:1.9.20 (configuration: default)
org.apache.maven.resolver:maven-resolver-transport-file:1.9.20 (configuration: default)
org.apache.maven.resolver:maven-resolver-transport-http:1.9.20 (configuration: default)
org.apache.maven.resolver:maven-resolver-util:1.9.20 (configuration: default)
org.apache.maven:maven-resolver-provider:3.9.6 (configuration: default)
org.jacoco:org.jacoco.agent:0.8.11 (configuration: default)
org.jetbrains.dokka:analysis-kotlin-descriptors:1.9.20 (configuration: default)
org.jetbrains.dokka:analysis-kotlin-descriptors:1.9.20 (configuration: default)
org.jetbrains.dokka:analysis-kotlin-descriptors:1.9.20 (configuration: default)
org.jetbrains.dokka:analysis-kotlin-descriptors:1.9.20 (configuration: default)
org.jetbrains.dokka:dokka-base:1.9.20 (configuration: default)
org.jetbrains.dokka:dokka-base:1.9.20 (configuration: default)
org.jetbrains.dokka:dokka-base:1.9.20 (configuration: default)
org.jetbrains.dokka:dokka-base:1.9.20 (configuration: default)
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.22 (configuration: default)
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.22 (configuration: default)
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.22 (configuration: default)
org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (configuration: default)
org.jetbrains.kotlin:kotlin-test:1.9.22 (configuration: default)
org.jetbrains.kotlin:kotlin-test:1.9.22 (configuration: default)
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 (configuration: default)
org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.0 (configuration: default)
org.jetbrains.kotlinx:kover-jvm-agent:0.8.0 (configuration: default)
org.jetbrains.kotlinx:kover-jvm-agent:0.8.0 (configuration: default)
org.jgrapht:jgrapht-core:1.5.2 (configuration: default)
org.jgrapht:jgrapht-ext:1.5.2 (configuration: default)
org.jgrapht:jgrapht-io:1.5.2 (configuration: default)
org.jgrapht:jgrapht-opt:1.5.2 (configuration: default)
org.junit.jupiter:junit-jupiter-params:5.6.3 (configuration: default)
org.junit.platform:junit-platform-launcher:1.10.2 (configuration: default)
org.ow2.asm:asm-analysis:9.7 (configuration: default)
org.ow2.asm:asm-commons:9.7 (configuration: default)
org.ow2.asm:asm-tree:9.7 (configuration: default)
org.ow2.asm:asm-util:9.7 (configuration: default)
org.ow2.asm:asm:9.7 (configuration: default)
Compile-time system properties:
java.class.path=/home/adamsmd/.gradle/wrapper/dists/gradle-8.7-bin/bhs2wmbdwecv87pi65oeuq5iu/gradle-8.7/lib/gradle-launcher-8.7.jar
java.class.version=63.0
java.home=/nix/store/r12q2z73ap6g09x815shkvsq3hsi740d-openjdk-19.0.2+7/lib/openjdk
java.io.tmpdir=/tmp
java.library.path=/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
java.runtime.name=OpenJDK Runtime Environment
java.runtime.version=19.0.2+7-nixos
java.specification.name=Java Platform API Specification
java.specification.vendor=Oracle Corporation
java.specification.version=19
java.vendor=N/A
java.vendor.url=https://openjdk.java.net/
java.vendor.url.bug=https://bugreport.java.com/bugreport/
java.version=19.0.2
java.version.date=2023-01-17
java.vm.compressedOopsMode=32-bit
java.vm.info=mixed mode, sharing
java.vm.name=OpenJDK 64-Bit Server VM
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Oracle Corporation
java.vm.specification.version=19
java.vm.vendor=Oracle Corporation
java.vm.version=19.0.2+7-nixos
os.arch=amd64
os.name=Linux
os.version=6.1.69
Runtime system properties:
java.class.path=/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/jade-0.0.0-122-gd41be7b-20240722T202551+0800.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/clikt-jvm.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/kotlin-logging-jvm-3.0.5.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/kotlin-stdlib-jdk8-1.8.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/kotlinx-coroutines-core-jvm-1.8.1.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/kotlinx-serialization-core-jvm-1.7.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/kotlinx-serialization-json-jvm-1.7.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/mordant-jvm.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/kotlin-stdlib-jdk7-1.8.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/colormath-jvm.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/markdown-jvm-0.7.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/kotlin-stdlib-2.0.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/logback-classic-1.5.6.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/javaparser-core-serialization-3.25.10.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/javaparser-symbol-solver-core-3.25.10.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/javaparser-core-3.25.10.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/commons-compress-1.26.1.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/zstd-jni-1.5.6-3.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/jgrapht-ext-1.5.2.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/jgrapht-io-1.5.2.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/jgrapht-opt-1.5.2.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/jgrapht-core-1.5.2.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/asm-commons-9.7.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/asm-util-9.7.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/asm-analysis-9.7.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/asm-tree-9.7.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/asm-9.7.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/indexer-core-7.1.3.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/indexer-reader-7.1.3.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-resolver-supplier-1.9.20.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-resolver-connector-basic-1.9.20.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-resolver-provider-3.9.6.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-resolver-impl-1.9.20.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-resolver-transport-file-1.9.20.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-resolver-transport-http-1.9.20.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-resolver-spi-1.9.20.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-resolver-util-1.9.20.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-resolver-api-1.9.20.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/annotations-23.0.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/logback-core-1.5.6.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-resolver-named-locks-1.9.20.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/jcl-over-slf4j-1.7.36.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/slf4j-api-2.0.13.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/jakarta.json-api-2.1.3.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/javassist-3.30.2-GA.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/guava-33.1.0-jre.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/commons-codec-1.16.1.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/commons-io-2.15.1.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/commons-text-1.10.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-model-builder-3.9.6.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-artifact-3.9.6.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/commons-lang3-3.14.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/jheaps-0.14.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/apfloat-1.10.1.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/jgraphx-4.2.2.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/antlr4-runtime-4.12.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/fastutil-8.5.12.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/javax.inject-1.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/lucene-queryparser-9.10.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/lucene-analysis-common-9.10.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/lucene-backward-codecs-9.10.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/lucene-highlighter-9.10.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/lucene-sandbox-9.10.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/lucene-queries-9.10.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/lucene-memory-9.10.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/lucene-core-9.10.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-model-3.9.6.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/httpclient-4.5.14.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/httpcore-4.4.16.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-repository-metadata-3.9.6.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/plexus-utils-3.5.1.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/failureaccess-1.0.2.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/jsr305-3.0.2.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/checker-qual-3.42.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/error_prone_annotations-2.26.1.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/plexus-interpolation-1.26.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/maven-builder-support-3.9.6.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/org.eclipse.sisu.inject-0.9.0.M2.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/jna-5.14.0.jar:/home/adamsmd/r/utah/jade/jade2/build/install/jade/lib/fastutil-core-8.5.12.jar
java.class.version=63.0
java.home=/nix/store/r12q2z73ap6g09x815shkvsq3hsi740d-openjdk-19.0.2+7/lib/openjdk
java.io.tmpdir=/tmp
java.library.path=/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
java.runtime.name=OpenJDK Runtime Environment
java.runtime.version=19.0.2+7-nixos
java.specification.name=Java Platform API Specification
java.specification.vendor=Oracle Corporation
java.specification.version=19
java.vendor=N/A
java.vendor.url=https://openjdk.java.net/
java.vendor.url.bug=https://bugreport.java.com/bugreport/
java.version=19.0.2
java.version.date=2023-01-17
java.vm.compressedOopsMode=Zero based
java.vm.info=mixed mode, sharing
java.vm.name=OpenJDK 64-Bit Server VM
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Oracle Corporation
java.vm.specification.version=19
java.vm.vendor=Oracle Corporation
java.vm.version=19.0.2+7-nixos
os.arch=amd64
os.name=Linux
os.version=6.1.69
loggers: List available loggers
List Loggers
$ ./jade about loggers
ROOT
org
org.eclipse
org.eclipse.aether
org.eclipse.aether.internal
org.eclipse.aether.internal.impl
org.eclipse.aether.internal.impl.DefaultArtifactResolver
org.eclipse.aether.internal.impl.DefaultInstaller
org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider
org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager
org.eclipse.aether.internal.impl.DefaultRepositoryConnectorProvider
org.eclipse.aether.internal.impl.DefaultRepositoryEventDispatcher
org.eclipse.aether.internal.impl.DefaultRepositoryLayoutProvider
org.eclipse.aether.internal.impl.DefaultTrackingFileManager
org.eclipse.aether.internal.impl.DefaultTransporterProvider
org.eclipse.aether.internal.impl.DefaultUpdatePolicyAnalyzer
org.eclipse.aether.internal.impl.checksum
org.eclipse.aether.internal.impl.checksum.SparseDirectoryTrustedChecksumsSource
org.eclipse.aether.internal.impl.checksum.SummaryFileTrustedChecksumsSource
org.eclipse.aether.internal.impl.collect
org.eclipse.aether.internal.impl.collect.bf
org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector
org.eclipse.aether.internal.impl.collect.df
org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector
org.eclipse.aether.internal.impl.filter
org.eclipse.aether.internal.impl.filter.GroupIdRemoteRepositoryFilterSource
org.eclipse.aether.internal.impl.filter.PrefixesRemoteRepositoryFilterSource
org.eclipse.aether.internal.impl.synccontext
org.eclipse.aether.internal.impl.synccontext.named
org.eclipse.aether.internal.impl.synccontext.named.DiscriminatingNameMapper
org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapterFactoryImpl
org.eclipse.aether.named
org.eclipse.aether.named.providers
org.eclipse.aether.named.providers.FileLockNamedLockFactory
org.eclipse.aether.named.providers.LocalReadWriteLockNamedLockFactory
org.eclipse.aether.named.providers.LocalSemaphoreNamedLockFactory
org.eclipse.aether.named.providers.NoopNamedLockFactory
org.ucombinator
org.ucombinator.jade
org.ucombinator.jade.maven
org.ucombinator.jade.maven.JadeMetadataResolver
org.ucombinator.jade.maven.Maven
org.ucombinator.jade.util
org.ucombinator.jade.util.Log
Test Loggers
$ ./jade about loggers --test
ROOT
ERROR .ROOT: error in Logger[ROOT]
WARN .ROOT: warn in Logger[ROOT]
INFO .ROOT: info in Logger[ROOT]
org
ERROR .org: error in Logger[org]
WARN .org: warn in Logger[org]
INFO .org: info in Logger[org]
org.eclipse
ERROR .org.eclipse: error in Logger[org.eclipse]
WARN .org.eclipse: warn in Logger[org.eclipse]
INFO .org.eclipse: info in Logger[org.eclipse]
org.eclipse.aether
ERROR .org.eclipse.aether: error in Logger[org.eclipse.aether]
WARN .org.eclipse.aether: warn in Logger[org.eclipse.aether]
INFO .org.eclipse.aether: info in Logger[org.eclipse.aether]
...
generate-completion: Generate a tab-complete script for the given shell
Bash
$ ./jade about generate-completion bash >completions/jade.bash
$ source completions/jade.bash
Zsh
$ ./jade about generate-completion zsh >completions/jade.zsh
$ source completions/jade.zsh
Fish
$ ./jade about generate-completion fish >completions/jade.fish
$ source completions/jade.fish
$ ./jade download-maven --shuffle ~/a/local/jade2/index/index ~/a/local/jade2/local-repo ~/a/local/jade2/dependency-lists ~/a/local/jade2/jar-lists