diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 51f4816..465af3e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -17,8 +17,9 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 1 # only needed to get the sha label - # We can't cache Docker without using buildx because GH actions restricts /var/lib/docker - # That's ok because DOCKER_PARENT_IMAGE is always ghcr.io and local anyway. + # Don't attempt to cache Docker. Sensitive information can be stolen + # via forks, and login session ends up in ~/.docker. This is ok because + # we publish DOCKER_PARENT_IMAGE to ghcr.io, hence local to the runner. - name: Deploy env: # GH_USER= diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bb9719f..8243766 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,5 +22,7 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 1 # only needed to get the sha label + # We can't cache Docker without using buildx because GH actions restricts /var/lib/docker + # That's ok because DOCKER_PARENT_IMAGE is always ghcr.io and local anyway. - name: Test run: build-bin/configure_test && build-bin/test diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 8cbca89..0000000 --- a/.travis.yml +++ /dev/null @@ -1,28 +0,0 @@ -# See https://docs.travis-ci.com/user/reference/overview/#for-a-particular-travisyml-configuration -arch: # test all supported archs as we don't test JDK1_8 with GH actions - - amd64 - - arm64 -os: linux # required for arch different than amd64 -dist: focal # newest available distribution -language: bash -services: docker - -git: - depth: false # TRAVIS_COMMIT_RANGE requires full commit history. - -if: branch = JDK1_8 AND tag IS blank AND type IN (push, pull_request) -before_install: | # Prevent test build of a documentation-only change. - if [ -n "${TRAVIS_COMMIT_RANGE}" ] && ! git diff --name-only "${TRAVIS_COMMIT_RANGE}" -- | grep -qv '\.md$'; then - echo "Stopping job as changes only affect documentation (ex. README.md)" - travis_terminate 0 - fi -install: ./build-bin/configure_test -script: ./build-bin/test - -notifications: - webhooks: - urls: - - https://webhooks.gitter.im/e/ead3c37d57527214e9f2 - - https://webhooks.gitter.im/e/9f1ee2f315d32956f8d6 - on_success: change - on_failure: always diff --git a/Dockerfile b/Dockerfile index de042c1..e6eba06 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ # docker_parent_image is the base layer of full and jre image # # Use latest version here: https://github.com/orgs/openzipkin/packages/container/package/alpine -ARG docker_parent_image=ghcr.io/openzipkin/alpine:3.19.0 +ARG docker_parent_image=ghcr.io/openzipkin/alpine:3.20.2 # We copy files from the context into a scratch container first to avoid a problem where docker and # docker-compose don't share layer hashes https://github.com/docker/compose/issues/883 normally. @@ -24,7 +24,7 @@ FROM $docker_parent_image as base # * Use current version from https://pkgs.alpinelinux.org/packages?name=openjdk8 # This is defined in many places because Docker has no "env" script functionality unless you use # docker-compose: When updating, update everywhere. -ARG java_version=8.392.08 +ARG java_version=8.402.06 ARG java_home=/usr/lib/jvm/java-1.8-openjdk LABEL java-version=$java_version LABEL java-home=$java_home @@ -41,8 +41,8 @@ ENTRYPOINT ["java", "-jar"] # The JDK image includes a few build utilities and Maven FROM base as jdk LABEL org.opencontainers.image.description="OpenJDK on Alpine Linux" -ARG java_version=8.392.08 -ARG maven_version=3.9.6 +ARG java_version=8.402.06 +ARG maven_version=3.9.8 LABEL maven-version=$maven_version COPY --from=code /code/install.sh . diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0c1111b --- /dev/null +++ b/LICENSE @@ -0,0 +1,216 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +This product contains a modified part of Gson, distributed by Google: + + * License: Apache License v2.0 + * Homepage: https://github.com/google/gson + +This product contains a modified part of Guava, distributed by Google: + + * License: Apache License v2.0 + * Homepage: https://github.com/google/guava + +This product contains a modified part of Okio, distributed by Square: + + * License: Apache License v2.0 + * Homepage: https://github.com/square/okio diff --git a/README.md b/README.md index 1cb01d9..7b813de 100644 --- a/README.md +++ b/README.md @@ -15,27 +15,27 @@ This is an internal base layer primarily used in [zipkin](https://github.com/ope To try the image, run the `java -version` command: ```bash -docker run --rm ghcr.io/openzipkin/java:8.392.08 -version -openjdk version "1.8.0_392" -OpenJDK Runtime Environment (IcedTea 3.29.0) (Alpine 8.392.08-r1) -OpenJDK 64-Bit Server VM (build 25.392-b08, mixed mode) +docker run --rm ghcr.io/openzipkin/java:8.402.06 -version +openjdk version "1.8.0_402" +OpenJDK Runtime Environment (IcedTea 3.30.0) (Alpine 8.402.06-r0) +OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode) ``` ## Release process Build the `Dockerfile` using the current version without the revision classifier from here: * https://pkgs.alpinelinux.org/packages?name=openjdk8 ```bash -# Note 8.392.08 not 8.392.08-r1! -./build-bin/build 8.392.08 +# Note 8.402.06 not 8.402.06-r1! +./build-bin/build 8.402.06 ``` Next, verify the built image matches that version: ```bash docker run --rm openzipkin/java:test -version -openjdk version "1.8.0_392" -OpenJDK Runtime Environment (IcedTea 3.29.0) (Alpine 8.392.08-r1) -OpenJDK 64-Bit Server VM (build 25.392-b08, mixed mode) +openjdk version "1.8.0_402" +OpenJDK Runtime Environment (IcedTea 3.30.0) (Alpine 8.402.06-r0) +OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode) ``` -To release the image, push a tag matching the arg to `build-bin/build` (ex `8.392.08`). +To release the image, push a tag matching the arg to `build-bin/build` (ex `8.402.06`). This triggers a [GitHub Actions](https://github.com/openzipkin/docker-java/actions) job to push the image. diff --git a/build-bin/README.md b/build-bin/README.md index 9cf3580..0aec6d6 100644 --- a/build-bin/README.md +++ b/build-bin/README.md @@ -1,9 +1,9 @@ # Test and Deploy scripts This is a Docker project, which uses standard conventions for test and deploy. What's notable about -docker-alpine is that the base layers are only pushed to `ghcr.io`, and tests are simply running the -`cat /etc/alpine-release`. There's a non-standard `build` script referenced in [../README.md] that -allows easier manual builds of the Dockerfile. +docker-java is that the base layers are only pushed to `ghcr.io`, and tests are simply running the +`-version` command. There's a non-standard `build` script referenced in [../README.md] that allows +easier manual builds of the Dockerfile. [//]: # (Below here should be standard for all projects) diff --git a/build-bin/docker/configure_docker b/build-bin/docker/configure_docker index f71bb1a..476ca70 100755 --- a/build-bin/docker/configure_docker +++ b/build-bin/docker/configure_docker @@ -1,16 +1,7 @@ #!/bin/sh # -# Copyright 2019-2023 The OpenZipkin Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except -# in compliance with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software distributed under the License -# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -# or implied. See the License for the specific language governing permissions and limitations under -# the License. +# Copyright The OpenZipkin Authors +# SPDX-License-Identifier: Apache-2.0 # # Defends against build outages caused by Docker Hub (docker.io) pull rate limits. @@ -23,6 +14,7 @@ set -ue # this is Docker related, it is coupled to integration tests configuration invoked with Maven. # * See https://www.testcontainers.org/supported_docker_environment/image_registry_rate_limiting/ # * checks.disable=true - saves time and a docker.io pull of alpine +# * ryuk doesn't count against docker.io rate limits because Docker approved testcontainers as OSS echo checks.disable=true >> ~/.testcontainers.properties # We don't use any docker.io images, but add a Google's mirror in case something implicitly does diff --git a/build-bin/docker/configure_docker_push b/build-bin/docker/configure_docker_push index a26fab3..c08d5cd 100755 --- a/build-bin/docker/configure_docker_push +++ b/build-bin/docker/configure_docker_push @@ -1,16 +1,7 @@ #!/bin/sh # -# Copyright 2019-2023 The OpenZipkin Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except -# in compliance with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software distributed under the License -# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -# or implied. See the License for the specific language governing permissions and limitations under -# the License. +# Copyright The OpenZipkin Authors +# SPDX-License-Identifier: Apache-2.0 # # Ensures Docker is logged in and it can build multi-architecture. diff --git a/build-bin/docker/docker_arch b/build-bin/docker/docker_arch index d83063e..70e091a 100755 --- a/build-bin/docker/docker_arch +++ b/build-bin/docker/docker_arch @@ -1,16 +1,7 @@ #!/bin/sh # -# Copyright 2019-2023 The OpenZipkin Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except -# in compliance with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software distributed under the License -# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -# or implied. See the License for the specific language governing permissions and limitations under -# the License. +# Copyright The OpenZipkin Authors +# SPDX-License-Identifier: Apache-2.0 # # This script gets a normalized name for the architecture as used in Docker. This will be a subset diff --git a/build-bin/docker/docker_args b/build-bin/docker/docker_args index 7f35ba3..1ebdb54 100755 --- a/build-bin/docker/docker_args +++ b/build-bin/docker/docker_args @@ -1,16 +1,7 @@ #!/bin/sh # -# Copyright 2019-2023 The OpenZipkin Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except -# in compliance with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software distributed under the License -# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -# or implied. See the License for the specific language governing permissions and limitations under -# the License. +# Copyright The OpenZipkin Authors +# SPDX-License-Identifier: Apache-2.0 # # This builds common docker arguments used by docker_build and docker_push. @@ -46,7 +37,7 @@ if [ -n "${DOCKER_TARGET}" ]; then fi # When non-empty, becomes the base layer including tag appropriate for the image being built. -# e.g. ghcr.io/openzipkin/java:21.0.1_p12-jre +# e.g. ghcr.io/openzipkin/java:21.0.3_p9-jre # # This is not required to be a base (FROM scratch) image like ghcr.io/openzipkin/alpine:3.12.3 # See https://docs.docker.com/glossary/#parent-image @@ -60,7 +51,7 @@ if [ -n "${ALPINE_VERSION}" ]; then docker_args="${docker_args} --build-arg alpine_version=${ALPINE_VERSION}" fi -# When non-empty, becomes the build-arg java_version. e.g. "21.0.1_p12" +# When non-empty, becomes the build-arg java_version. e.g. "21.0.3_p9" # Used to align base layers from https://github.com/orgs/openzipkin/packages/container/package/java if [ -n "${JAVA_VERSION}" ]; then docker_args="${docker_args} --build-arg java_version=${JAVA_VERSION}" diff --git a/build-bin/docker/docker_build b/build-bin/docker/docker_build index 05d5450..cf7363f 100755 --- a/build-bin/docker/docker_build +++ b/build-bin/docker/docker_build @@ -1,16 +1,7 @@ #!/bin/sh # -# Copyright 2019-2023 The OpenZipkin Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except -# in compliance with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software distributed under the License -# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -# or implied. See the License for the specific language governing permissions and limitations under -# the License. +# Copyright The OpenZipkin Authors +# SPDX-License-Identifier: Apache-2.0 # set -ue @@ -19,5 +10,10 @@ docker_tag=${1?full docker_tag is required. Ex openzipkin/zipkin:test} version=${2:-} docker_args=$($(dirname "$0")/docker_args ${version}) +# We don't need build kit, but Docker 20.10 no longer accepts --platform +# without it. It is simpler to always enable it vs require maintainers to use +# alternate OCI tools. See https://github.com/moby/moby/issues/41552 +export DOCKER_BUILDKIT=1 + echo "Building image ${docker_tag}" -DOCKER_BUILDKIT=1 docker build --network=host --pull ${docker_args} --tag ${docker_tag} . +docker build --network=host --pull ${docker_args} --tag ${docker_tag} . diff --git a/build-bin/docker/docker_push b/build-bin/docker/docker_push index 3d3c8f9..6aaa374 100755 --- a/build-bin/docker/docker_push +++ b/build-bin/docker/docker_push @@ -1,16 +1,7 @@ #!/bin/sh # -# Copyright 2019-2023 The OpenZipkin Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except -# in compliance with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software distributed under the License -# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -# or implied. See the License for the specific language governing permissions and limitations under -# the License. +# Copyright The OpenZipkin Authors +# SPDX-License-Identifier: Apache-2.0 # # This script pushes images to GitHub Container Registry (ghcr.io). @@ -27,6 +18,10 @@ set -ue docker_image=${1?docker_image is required, notably without a tag. Ex openzipkin/zipkin} version=${2:-master} + +# We don't need build kit, but Docker 20.10 no longer accepts --platform +# without it. It is simpler to always enable it vs require maintainers to use +# alternate OCI tools. See https://github.com/moby/moby/issues/41552 export DOCKER_BUILDKIT=1 case ${version} in diff --git a/install.sh b/install.sh index c347504..c6d4f0a 100755 --- a/install.sh +++ b/install.sh @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright 2019-2020 The OpenZipkin Authors +# Copyright 2019-2024 The OpenZipkin Authors # # Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except # in compliance with the License. You may obtain a copy of the License at @@ -49,5 +49,5 @@ apache_backup_mirror=https://downloads.apache.org/ (wget ${apache_mirror}${maven_dist_path} || wget ${apache_backup_mirror}${maven_dist_path}) | tar xz --strip=1 -C maven ln -s ${PWD}/maven/bin/mvn /usr/bin/mvn -mvn -q --batch-mode org.apache.maven.plugins:maven-help-plugin:3.4.0:evaluate -Dexpression=maven.version -q -DforceStdout || maybe_log_crash -mvn -q --batch-mode org.apache.maven.plugins:maven-dependency-plugin:3.6.1:get -Dmdep.skip +mvn -q --batch-mode org.apache.maven.plugins:maven-help-plugin:3.4.1:evaluate -Dexpression=maven.version -q -DforceStdout || maybe_log_crash +mvn -q --batch-mode org.apache.maven.plugins:maven-dependency-plugin:3.7.1:get -Dmdep.skip